您好我有一个 Windows 窗体应用程序。我有一个文本框。我想实现一个功能,比如当用户单击文本框时,应该向用户提供一个列表,然后从列表中选择的项目应该填充到文本框中。如果文本框以外的某些其他控件被聚焦,则该列表不可用。这样做的更好方法是什么?我应该以与文本框相同的形式实现列表,还是应该为列表使用另一种形式?
我想实现一个类似 Tally 会计软件的功能。
当您使用面板时,您可以更改Visible属性以隐藏其中的所有内容。
panel1.Visible = true; //visible
panel1.Visible = false; //invisible
现在您可以说:单击文本框时,显示列表:
private void textbox1_Click(object sender, EventArgs e)
{
panel1.Visible = true;
}
现在,当表单获得焦点时,您可以隐藏列表:
private void form1_Click(object sender, EventArgs e)
{
panel1.Visible = false;
}
当列表的选定项目更改设置文本框的文本时:
private void ListView1_ItemSelectionChanged(Object sender, ListViewItemSelectionChangedEventArgs e)
{
foreach ( ListViewItem item in ListView1.SelectedItems)
{
textbox1.Text = item.SubItems[1].Text;
}
}
您可以为此使用文本框控件的一些事件。
您可以使用 Enter 和 Leave 来控制列表的 .Visible 或 .Enabled 属性。
使用一个列表并使用进入和离开动态填充。您将需要一个标记来指示您正在操作的文本框。
例子
TextBox activeText;
private void txtBox1_Enter(object sender, EventArgs e)
{
lstMyList.dataSource = list1Data;
activeText = (TextBox)sender;
}
private void lstMyList_SelectedValueChanged(object sender, EventArgs e)
{
ListBox myList = (ListBox)sender;
activeText.Text = myList.SelectedValue.ToString();
}
也许是这样的?
在我看来,使用单独的表格,并在新表格中显示所有列表。单击文本框,您需要显示新表单。
对于获取选定的项目有很多方法
方法1。
FORM2 frm = new FORM2(LIST<string> items)
frm.ShowDailog();
textBox1.text = add items from items
方法2。
FORM2 frm = new FORM2()
if(frm.ShowDailog() == DialogResults.Ok)
{
textBox1.text = frm.GetSelectedItems();
}