2015-03-25 3 views
1

В приложении C# я работаю с настраиваемыми файлами .designer при активации формы Security Policy Я вижу следующее. Я меченный каждый кадр в форме с A, B, C, и D, а также выделен желтым цветом текст, который фактически выделен (и начала вкладки позиция), когда форма активна:Загадочная закладка в WinForm

output I see

Очевидно, мне хотелось бы, чтобы этот текст был желтым до не был выделен, а для позиции начального положения было первым текстовым полем формы.

Мои попытки исправить эту проблему:

  • Я посмотрел в .designer файл для формы, и обнаружили, что все TabIndex свойства были в порядке. Фреймы TabIndex были установлены в последовательном порядке от 0 до 3. Тем не менее я удалил все из них.
  • Я также потрошил все другие свойства управления, которые, как я чувствовал, могут нести ответственность за выделение и позицию по умолчанию.
  • Я просмотрел файл .cs, который ищет какой-либо метод .Focus() или .Select().
  • Я попытался использовать Select() метод FrameA с

    this.fraFrameA.Select();

    , а также

    this.FrameAControl1.Select();

    , но они не имели никакого эффекта.

  • Я заказана весь состав .designer файла вручную (для испытательных целей) таким образом, что его структура выглядит следующим образом: (Если вы не чувствуете, как смотреть через него, в основном каждая часть в порядке от FrameA к FrameD):

    this.fraFrameA = new //control type here 
    this.fraInteriorFrameInFrameA = //control type here 
    // all of the Frame A controls 
    // 
    //Same as above for frames B, C, and D 
    // 
    // frmLoginSecurity 
    // 
    this.Name = "frmLoginSecurity"; 
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 
    this.Text = "Security Policy"; 
    this.MaximizeBox = false; 
    this.MinimizeBox = false; 
    this.ShowInTaskbar = false; 
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 
    this.Location = new System.Drawing.Point(3,22); 
    this.ClientSize = new System.Drawing.Size(442,694); 
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 
    this.Icon = ((System.Drawing.Icon) (resources.GetObject("frmLoginSecurity.Icon"))); 
    // 
    //Each Frame's properties followed by their respective subcontrol's properties 
    // 
    //Controls 
    // 
    this.Controls.Add(fraFrameA); 
    //all FrameA subcontrols 
    // 
    //Controls added similarly for Frames B, C, and D 
    // 
    //Add all of my event handlers 
    // 
    public Controls.ControlType fraFrameA; 
    //all fraFrameA subcontrols 
    // 
    //Declared similarily for Frames B, C, and D 
    //

свойства управления по-прежнему остается в моей .designer файл после потрошения:

  • Имя, Максимум/Минимум, расположение, размер, стоимость, Текст, BorderStyle и Caption

Теперь я полностью потерял, как к тому, что можно было бы принуждая в моей форме по умолчанию позиция табуляции равна FrameD и выделяется первое текстовое поле внутри нее. Возможно, мне не хватает чего-то тривиального, но что еще может привести к тому, что моя форма будет по умолчанию равна FrameD? Может ли одно из еще существующих свойств, которое я перечислил, повлиять на позицию активации по умолчанию?

Обратите внимание, что я в Visual Studio 2008

ответ

2

Хотя мое конкретная проблема/решение вряд ли воспроизводимо, это может помочь другим с аналогичным МОГ вопрос идентификация, если/почему они могут смотреть в неправильное местоположение.


Оказывается ... это не .designer файл !!!

Скрытый код активации формы в файле .cs и обнаружил, разбив через весь файл, там был этот подлый строка кода:

MyUpdownControlinFrame4.Text = Convert.ToString(objLoginSecurity.SomeNumber); 

Все, что я изначально думал, что эта линия делает было преобразование число в строку. Глядя в private void MyUpdownControl_Change(object sender, EventArgs e), я нашел:

if (Visible) 
{ 
    MyUpdownControlinFrame4.Focus(); 
    MyUpdownControlinFrame4.SelectionStart = 0; 
    MyUpdownControlinFrame4.SelectionLength = SomeNumber.MaximumLength; 
} 

С Visibleявляется оценивается в true, после того, как мой файл .designer был загружен (с правильными TabIndex свойствами), скрытый .Focus() код активации формы в моем Файл .cs выделял преобразованный текст. Этот вызываемый .Focus() был результатом неправильного слияния логики в элементе управления UpDown и управления TextBox. Причина, по которой он был даже там, в первую очередь, заключался в том, чтобы выделить текст Textbox, поскольку пользователь меняет значение на UpDown (Формы безопасности Microsoft сделали это 15 лет назад).


Урок:

Если ваш TabIndex кажется неверным при загрузке WinForm, однако все выглядит нормально в файле .designer, перед тем тратить время разрывая свой .designer файл заводится вы можете легко протестировать любой код, инициализированный при активации вашей формы в вашем файле .cs, чтобы убедиться, что проблема связана с вашим файлом .designer. Существует вероятность, что ваш файл .designer в порядке, и проблема заключается в обработке кода после, загружающий файл .designer.

Как я проверил, если он был на самом деле мой .designer файл:

Я просто помещен

this.FrameAControl1.Focus(); 

в начале моего кода активации формы в файле .cs, и заметил, что я была та же проблема. Положив его в конце, однако, занесенный в правильное место и вызвавший мое ожидаемое поведение. Затем пробив каждую строку, я обнаружил, что .Focus() происходит на контроле Frame4.

+1

Благодарим вас за возвращение, чтобы опубликовать ваши результаты. –

Смежные вопросы