j.s.banger
j.s.banger

Reputation: 412

Select a particular line in textbox?

from1 picture enter image description hereI have a two forms, 1 and 2. Form1 has one textbox and form2 has a textbox and button. I want to go to a specified line, meaning that when I enter the value of form2's textbox then my mouse cursor goes to form1's textbox.

private void button1_Click(object sender, EventArgs e)
{
  int line = Form1.ab;
  for (int i = 1; i < line; i++)
  {
      if (i == Convert.ToInt16( textBox1.Text))
      {
        // fr.textbox1 is a textbox form1 and 
        // textbox1.text is a textbox of the form1
        fr.textBox1.SelectionStart =
           int.Parse( textBox1.Text) ;
        fr.textBox1.ScrollToCaret();
        break;
      }
  }
}

Upvotes: 7

Views: 15208

Answers (6)

Max xaM
Max xaM

Reputation: 1

maybe this better:

{
    ...
    string SelectedText = fr.textBox1.Lines[line];
    int SelectedTextPos = fr.textBox1.Text.IndexOf(SelectedText);
    int SelectedTextLen = SelectedText.Lenght;

    fr.textBox1.Select(SelectedTextPos, SelectedTextLen);
    fr.textBox1.ScrollToCaret();
    ...
}

Upvotes: -1

Hicham
Hicham

Reputation: 31

Try the below code

var sdr = (System.Windows.Controls.TextBox) sender;
if (!string.IsNullOrEmpty(sdr.Text)) {
  var start = sdr.Text.LastIndexOf(Environment.NewLine, sdr.CaretIndex);
  var lineIdx = sdr.GetLineIndexFromCharacterIndex(sdr.CaretIndex);
  var lineLength = sdr.GetLineLength(lineIdx);

  sdr.SelectionStart = start + 1;
  sdr.SelectionLength = lineLength;

  sdr.SelectedText.Substring(0, sdr.SelectedText.IndexOf(Environment.NewLine) + 1);
  Clipboard.SetText(sdr.SelectedText);

}

Upvotes: 1

DOT.NET
DOT.NET

Reputation: 101

You are creating a NEW form1 where the textbox is likely to be blank, and calling GetPass() on that empty form. You need an instance of the already-opened form1 where the textbox might have a value. for more information

click here

Upvotes: 1

DiskJunky
DiskJunky

Reputation: 4991

try something like;

int lineNumber = Form1.ab;

// split the contents of the text box
string text = textBox1.Text;
string[] lines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
if (lineNumber < 0 || lineNumber > lines.Length)
{
    MessageBox.Show("The line number is does not exist");
    return;
}

// get the character pos
int selStart = 0;
for (int i = 0; i < (lineNumber - 1); i++)
{
    selStart += lines[i].Length + Environment.NewLine.Length;
}
textBox1.Focus();
textBox1.SelectionStart = selStart;
textBox1.SelectionLength = lines[lineNumber - 1].Length;

Note: you can access the other text box directly in the other form by going to the Form2 designer, clicking the text box and going to Properties. In the Properties dialog, look for a property called Modifiers and change the value to internal or public. This will allow you to access the text box value in the other form directly like so;

private void Form1_Load(object sender, EventArgs e)
{
    Form2 form2Instance = new Form2();
    string sampleText = form2Instance.textBox1.Text;
}

If you need to know further samples on how to access controls/details on other forms, let me know.

Upvotes: 1

pescolino
pescolino

Reputation: 3133

The TextBox.GetFirstCharIndexFromLine method finds the index of the first character of a line. So your selection starts there. Then find the end of that line, which is Environment.NewLine or the end of the text. Since the line number is entered by the user you should use int.TryParse to handle invalid input.

private void button1_Click(object sender, EventArgs e)
{
    int lineNumber;
    if (!int.TryParse(textBox2.Text, out lineNumber) || lineNumber < 0)
    {
        textBox1.Select(0, 0);
        return;
    }

    int position = textBox1.GetFirstCharIndexFromLine(lineNumber);
    if (position < 0)
    {
        // lineNumber is too big
        textBox1.Select(textBox1.Text.Length, 0);
    }
    else
    {
        int lineEnd = textBox1.Text.IndexOf(Environment.NewLine, position);
        if (lineEnd < 0)
        {
            lineEnd = textBox1.Text.Length;
        }

        textBox1.Select(position, lineEnd - position);
    }
}

Upvotes: 11

Shaharyar
Shaharyar

Reputation: 12459

Apply this logic to your code, and recode it as you need.

private void button1_Click(object sender, EventArgs e)
            {
                if (textBox_Form1.Text.Contains(textBox_Form2.Text))
                {
                    textBox_Form1.Focus();
                    textBox_Form1.SelectionStart = textBox_Form1.Text.IndexOf(textBox_Form2.Text);
                    textBox_Form1.SelectionLength = textBox_Form2.Text.Length;
                }
            }

Upvotes: 2

Related Questions