私はC#を使用しているWindowsアプリケーションを持っています。私は、ユーザーがログインするロードフォームfrmMain
を作成しました。顧客創造のようなユーザーのための4つのオプション、サプライヤー創造、従業員の創造、ユーザの作成ユーザーコントロールのフォーカスを維持Windowsアプリケーション
をこの正常に動作します。
問題はフォーカスで発生します。ユーザーがCustomer
ユーザーコントロールを読み込んでデータを入力すると、ユーザーが4番目のコントロール(Textbox
/Combobox
または他のWindowsフォーム入力コントロール)のどこかにいて、突然CreateUser
をクリックすると、コントロールロードはCreateUser
になりますが、 Customer
ユーザコントロールの4番目の制御。
私が欲しいのは、現在のユーザーコントロールにフォーカスを置くことです。ユーザーコントロールが新しく読み込まれた場合は、デフォルトのコントロールにフォーカスを置きます。
私が使用していたコード、
// this method gets called if the form was opened earlier
private void ShowOpenForm(ControlItem _item)
{
try
{
//Get item from menu
ControlItem _menuI = null;
foreach (ToolStripmenuI menuI in tsmenuWindow.DropDownItems)
{
_menuI = (ControlItem)menuI.Tag;
if (_menuI.Control.Name.ToLower() == _item.Control.Name.ToLower())
{
break;
}
_menuI = null;
}
if (_menuI != null)
{
WmenuI_ClearAllSelection();
for (int index = 0; index < PnlUserCtrl.Controls.Count; index++)
{
Control ctl = PnlUserCtrl.Controls[index];
if (ctl.Name.ToLower() == _menuI.Control.Name.ToLower())
{
ctl.Visible = true;
ctl.BringToFront();
break;
}
}
WmenuI_SetCurrentItemChecked(_menuI);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//User can navigate to opened items from menu as well
private void WindowMenuItem_Click(object sender, EventArgs e)
{
try
{
ControlItem _item = (ControlItem)((ToolStripMenuItem)sender).Tag;
WmenuI_ClearAllSelection();
for (int index = 0; index < PnlUserCtrl.Controls.Count; index++)
{
Control ctl = PnlUserCtrl.Controls[index];
if (ctl.Name.ToLower() == _item.Control.Name.ToLower())
{
ctl.Visible = true;
ctl.BringToFront();
if (ctl is BaseControl)
{
((BaseControl)ctl).SetFocus(); // This sets the focus to default textbox
}
break;
}
}
WmenuI_SetCurrentItemChecked(_item);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
しかし、デフォルトのテキストボックスに、このセットのフォーカスを確認してください。ユーザーが他のユーザーコントロールに移動した場所からの制御ではありません。
ユーザーコントロールにフォーカスを設定するだけです。 UserControlは決してフォーカスを望んでいないので、自動的にフォーカスを最も低いTabIndexを持つコントロールに移動します。 –