Проблема с установкой фокуса/выбора на Form1 после того, как я покажу Form2 с помощью AxAcroPDFLib

Согласно заголовку, у меня возникают проблемы с выбором и установкой фокуса на элемент управления в Form1 сразу после того, как я показываю Form2. Любая идея, почему приведенный ниже код не работает?

public partial class MainForm : Form
{
     public Form2 frm2;

     ...

     public void ReadThroughContents(int index)
     {
        ...

        if (frm2.IsDisposed || frm2 == null) { frm2 = new Form2(); }
        if (!frm2.Visible) { frm2.Show(); }

        this.listbox1.Focus();
        this.listbox1.Select();

        ...
     }

РЕДАКТИРОВАТЬ: Просто чтобы было ясно, основное внимание уделяется Form2. Однако я могу выбрать и сфокусироваться на Form1 вручную, щелкнув форму, но мне нужно, чтобы это было сделано автоматически.

EDIT: в Form2 я использую библиотеку AxAcroPDFLib. Файл PDF загружается в Form2, когда он отображается. Я считаю, что именно это мешает Form1 получить фокус. Я пробовал без загрузки файла PDF, и я могу автоматизировать фокусировку.

Ваше здоровье.


person Magic Mick    schedule 31.07.2014    source источник


Ответы (2)


Просто чтобы было ясно, основное внимание уделяется Form2.

Это происходит потому, что Form.Show крадет фокус.

Вы можете попытаться вернуть фокус на форму Form1, прежде чем устанавливать фокус на определенные элементы управления. Вы можете использовать Form.Activate для этого:

//...
this.Activate();
this.listbox1.Focus();
//...

Проверьте этот вопрос, если вы хотите всегда показывать Form2 без кражи фокуса: Показать форму без кражи сосредоточиться?

person default locale    schedule 31.07.2014
comment
Это сработало бы и без использования AxAcroPDFLib... Я считаю, что моя проблема намного сложнее. Спасибо за помощь. - person Magic Mick; 31.07.2014
comment
@TonyMontana У меня нет опыта работы с Acrobat SDK. Поиск привел меня к этому вопросу, взгляните на Ганса Комментарий Пассана там - person default locale; 31.07.2014

Нашел решение благодаря @defaultlocale выше!

Код скопирован из здесь

private void returnFocus(object sender, EventArgs e)
    {
        lstboxItems.Focus();
    }
this.lstboxItems.LostFocus += new System.EventHandler(this.returnFocus);
person Magic Mick    schedule 31.07.2014