C# 获取从其他表单中选择的项目

C# 获取从其他表单中选择的项目,c#,winforms,C#,Winforms,嗨,我有一个Windows窗体应用程序。我有一个文本框。我想实现一个功能,比如当用户单击文本框时,应该向用户提供一个列表,然后从列表中选择的项目应该填充到文本框中。如果文本框以外的其他控件处于焦点位置,则该列表不可用。做这件事最好的方法是什么?我应该以与文本框相同的形式实现列表,还是应该为列表使用另一种形式 我想实现一个功能,如在理货会计 软件 文本框控件有几个事件可用于此操作 您可以使用Enter和Leave控制列表的.Visible或.Enabled属性 使用一个列表并使用enter和le

嗨,我有一个Windows窗体应用程序。我有一个文本框。我想实现一个功能,比如当用户单击文本框时,应该向用户提供一个列表,然后从列表中选择的项目应该填充到文本框中。如果文本框以外的其他控件处于焦点位置,则该列表不可用。做这件事最好的方法是什么?我应该以与文本框相同的形式实现列表,还是应该为列表使用另一种形式


我想实现一个功能,如在理货会计 软件



文本框控件有几个事件可用于此操作

您可以使用Enter和Leave控制列表的.Visible或.Enabled属性

使用一个列表并使用enter和leave动态填充。您需要一个标记来指示您正在操作的文本框

范例

    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();

    }
可能是这样的吗?

制作一个包含

使用面板时,可以更改属性以隐藏其中的所有内容

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 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;
    }
}

在我的视图中,使用单独的表单,在新表单中,将显示所有列表。单击文本框,您需要显示新表单

获取所选项目有多种方法

  • 将列表参数发送到新表单(构造函数)
  • 表单关闭时获取新表单的方法
  • 静态全局变量
  • 方法1

    FORM2 frm = new FORM2(LIST<string> items)
    frm.ShowDailog();
    textBox1.text = add items from  items
    

    听起来像一个组合框对我来说…听起来你需要一个不,而不是组合框。我知道comboBox,但我需要一个远离文本框的列表,可能在表单的右侧,而文本框在左侧。如何在FORM1中的文本框中选择FORM2中的listitem,其中FORM1负责在FORM2中弹出?您能否给出此软件的屏幕截图,因为该软件不是免费的。层的真正含义是什么?是否有办法使其在Form Design视图中也不可见?这是因为我需要在列表已经占据的位置放置一些其他控件。@SamarthAgarwal不知道它是否有效我坐在一个iMac上,所以我没有测试它…这就是我现在所做的,但唯一的问题是列表在同一个表单上,并且在表单的那个位置,我需要放置其他控件。然后我将使用面板,正如下面Paedow所建议的那样。只需制作两个控件布局,并将它们设置在彼此的顶部。然后你可以用同样的方法控制它的可见性。只需使用面板,而不是单个控件。是的,您可以通过更改myList的visible属性将其设置为在设计中不可见。如果我将它们放在一起,则其中只有一个可见。。。在设计的时候,我该如何隐藏其中一个呢?我想你不会。您可以在运行时隐藏一个对象,但在构建该对象时,该对象将可见。我误解了你的问题。您可以将它们放在一起,而不是放在彼此的上面,然后在运行之前将它们放在同一个位置。您的所有控件都将随容器一起移动。那么,您能否用文本框选择动态填充列表?我不知道你有那么多。简单地说,你能告诉我如何从另一个表单检索选择的值到一个已经打开的表单吗。它就像:FORM1-->FORM2 FORM2-->FORM1,而FORM1一直处于打开状态!form2只是一个对话框!请使用表格1和表格2。。。我不明白。Form1最初是开放的。我打开Form2,Form2必须将参数(列表项)发送回Form1。现在,Form1将如何接收这些参数,因为它已经打开了@SamarthAgarwal,在文本框中,您希望如何显示?我是说每个项目都用逗号分隔?请检查屏幕截图。文本框选择打开列表,然后从列表中选择的项目最终显示在文本框中。然后其他文本框也会出现这种情况。