如何使多个对象不可见与多个表单事件
本文关键字:表单 事件 何使多 对象 | 更新日期: 2023-09-27 18:16:29
我有一个c# windows窗体项目,有五个只读文本框。当一个文本框被点击时,一个特定于文本框的列表框变得可见,一旦从该列表框中选择内容并写入文本框,该列表框就会关闭。我还能够使它,使任何打开的列表框是不可见的,如果另一个文本框被选中。我需要帮助的是如何确保所有的列表框是不可见的,如果除了表单上的文本框以外的任何东西都被选中,例如按钮,其他文本框,菜单等。我想知道是否有一个更有效的方法来做到这一点,而不是调用一个方法,确保所有列表框都不可见,从每个定义的事件的形式。谢谢抱歉,但我应该输入更多的细节和过分简化的东西。实际上,文本框激活带有列表框和修改列表框的按钮的面板。我试过在面板和列表框上留下事件处理程序,但当您单击文本框以外的任何地方时,似乎都不起作用。如果在文本框上放置leave事件,则在面板关闭时无法从列表框中选择任何内容。代码如下
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
panel1.Visible = false;
panel2.Visible = false;
}
private void textBox2_MouseDown(object sender, MouseEventArgs e)
{
panel1.Visible = true;
panel2.Visible = false;
}
private void textBox3_MouseDown(object sender, MouseEventArgs e)
{
panel1.Visible = false;
panel2.Visible = true;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox2.Text = listBox1.SelectedItem.ToString();
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
textBox3.Text = listBox2.SelectedItem.ToString();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
panel1.Visible = false;
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
panel2.Visible = false;
}
private void listBox1_Leave(object sender, EventArgs e)
{
panel1.Visible = false;
}
private void listBox2_Leave(object sender, EventArgs e)
{
panel2.Visible = false;
}
private void panel1_Leave(object sender, EventArgs e)
{
panel1.Visible = false;
}
private void panel2_Leave(object sender, EventArgs e)
{
panel2.Visible = false;
}
}
}
再次感谢
您可以通过将多个Control
的Visible属性绑定到一个公共变量来控制它们的可见性。在Visual Studio设计器中,选择文本框并查看其属性。有一个标记为DataBindings的部分,在该部分下面有一个(Advanced)选项。单击它,您将看到可用于绑定的属性列表。选择Visibility属性并选择一个现有的布尔变量(作为Project数据源)与之关联。您可以使用相同的变量绑定到多个文本框的visible属性。当您的程序逻辑将该变量设置为True或False时,该文本框组应相应地出现/消失。
我想我实际上已经用一点毅力解决了这个问题要执行此操作,两个文本框打开带有按钮和列表框的单独面板。面板中的按钮将修改列表框,当在列表框中进行选择时,它将被写入相同的只读文本框。我的问题是,如果没有做出选择,并且用户转到表单的另一部分,我需要关闭这些面板。我已经尝试了所有的组合,解决方案似乎是将焦点放在面板上,当它是通过文本框单击事件打开,然后有一个面板离开事件,使面板不可见。我还需要使面板不可见与窗体单击事件。最终代码如下:
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
panel1.Visible = false;
panel2.Visible = false;
}
private void textBox2_MouseDown(object sender, MouseEventArgs e)
{
panel1.Visible = true;
panel2.Visible = false;
panel1.Focus();
}
private void textBox3_MouseDown(object sender, MouseEventArgs e)
{
panel1.Visible = false;
panel2.Visible = true;
panel2.Focus();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox2.Text = listBox1.SelectedItem.ToString();
panel1.Visible = false;
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
textBox3.Text = listBox2.SelectedItem.ToString();
panel2.Visible = false;
}
private void panel1_Leave(object sender, EventArgs e)
{
panel1.Visible = false;
}
private void panel2_Leave(object sender, EventArgs e)
{
panel2.Visible = false;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
panel1.Visible = false;
panel2.Visible = false;
}
}
}