Как установить фокус на объект (текстовое поле) в основной форме из другой формы (C #) - PullRequest
2 голосов
/ 27 марта 2011

Я перепробовал все, что знаю. Проблема в том, что мое текстовое поле находится в групповом поле. У меня есть Mainform, из которой я перехожу в другую форму. Когда я возвращаюсь в Mainform, я хочу, чтобы конкретный объект был сфокусирован. Как это сделать? Вот мой код в моей главной форме.

    private void button1_Click(object sender, EventArgs e)
    {
         Form1 frm = new Form1();
         frm.ShowDialog();
    }

вот так я и возвращаюсь к своей главной форме из формы 1.

    private void button3_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }

У меня есть textBox1 в Mainform. Как установить фокус на textBox1 при выходе из Form1 и вводе Mainform. Я пробовал textBox1.Focus(); и this.ActiveControl = this.textBox1; в событиях Mainform Load, Show, Activated и Enter. Все еще не работал. Я попытался создать публичный метод и вызвать его под кнопкой выхода из Form1. Вот так.

В Mainform,

    public void textBox1Focus()
    {
        textBox1.Focus();
    }

А затем в Form1,

    private void button3_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
        Mainform frm = new Mainform();
        frm.textBox1Focus();
    }

Который все еще не работал. Мой textBox1 находится в окне группы. Может ли это быть причиной?

Спасибо.

1 Ответ

6 голосов
/ 27 марта 2011

Я не понимаю, как код, который вы показали, даже компилируется.Вы вызываете textBox1Focus() изнутри метода, определенного в классе Form1, который, насколько я понимаю, не содержит определения для textBox1Focus.Этот метод определен только в классе Mainform.

И нет, текстовое поле, помещаемое в групповое поле, не мешает ему получить фокус.Что-то не так с вашим кодом.Сложно сказать;Мне кажется, что я смотрю на закат сквозь венецианские жалюзи, а не через большое окно с картинками.Просто установите фокус на элемент управления textbox в конце метода button1_Click.Метод ShowDialog является блокирующим вызовом, что означает, что выполнение не будет продолжаться до тех пор, пока пользователь не закроет вторую форму.Когда это произойдет, выполнение продолжится со следующей строки кода, которая установит фокус на элемент управления textbox.

Попробуйте изменить код на следующее:

private void button1_Click(object sender, EventArgs e)
{
     Form1 frm = new Form1();
     frm.ShowDialog();
     this.textBox1.Select();
}
...