废话不多说、直接正题
我写了一个自定义按钮(继承UserControl),按钮设置了一个编号属性(int型),和一个开关属性(bool型)
这个按钮需要同时显示多个、这里我们打比方说是5个、通过设置编号属性,按钮上的数字分别为1,2,3,4,5
如果双击按钮、按钮会变颜色、bool型的开关属性也会改变
但是现在需求是:当一个按钮双击(打开)的话、其他的必须强行关闭(有这个限制、其实当时最多也只有一个按钮开着)
总的来说就是:最多只能有一个按钮开着
怕说不清楚、语言叙述一个Test流程:5个按钮初始完毕,双击1号,1号开关属性从默认的false变成true(再双击1号的话、1号的开关属性会再变成false、但是现在说的是、不关1号的情况下)、再双击3号、1号开关属性变成false、3号属性变成true
说白了就是没法知道前一个操作的是哪个
也想过、每双击(打开)一个按钮时、把所有按钮遍历一遍、不论什么情况全部设为false、然后再把当前这个设为true、但是总感觉还有更好的办法、比如创建一个和全局变量效果相仿的东西。希望各位多分享宝贵思路、非常感谢
我写了一个自定义按钮(继承UserControl),按钮设置了一个编号属性(int型),和一个开关属性(bool型)
这个按钮需要同时显示多个、这里我们打比方说是5个、通过设置编号属性,按钮上的数字分别为1,2,3,4,5
如果双击按钮、按钮会变颜色、bool型的开关属性也会改变
但是现在需求是:当一个按钮双击(打开)的话、其他的必须强行关闭(有这个限制、其实当时最多也只有一个按钮开着)
总的来说就是:最多只能有一个按钮开着
怕说不清楚、语言叙述一个Test流程:5个按钮初始完毕,双击1号,1号开关属性从默认的false变成true(再双击1号的话、1号的开关属性会再变成false、但是现在说的是、不关1号的情况下)、再双击3号、1号开关属性变成false、3号属性变成true
说白了就是没法知道前一个操作的是哪个
也想过、每双击(打开)一个按钮时、把所有按钮遍历一遍、不论什么情况全部设为false、然后再把当前这个设为true、但是总感觉还有更好的办法、比如创建一个和全局变量效果相仿的东西。希望各位多分享宝贵思路、非常感谢
比如、我在自定义按钮类中定义了一个static变量、但是按钮可能会同时显示好多、比如我点1号、static变量的值设置为1(编号属性)、但是我点2的时候、2里边的static变量值会不会还是自定义控件类中的原始值?
毕竟每个按钮的添加都是实例化了自定义控件类、static会不会也是一个一个独立的?互不相干?
bool bOpAndCl = false;//按钮开关,false为关,true为开
int iJtIndex = 0;//按钮编号,从0开始,按钮上显示的数字根据此属性、不过则是从1开始
public int JtIndex
{
set { iJtIndex = value; }
get { return iJtIndex; }
}
public bool OpAndCl
{
set { bOpAndCl = value; }
get { return bOpAndCl; }
}
void JtControl_Paint(object sender, PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
Font font = new Font("黑体", 15, FontStyle.Bold);
string str = string.Format("{0}", JtIndex + 1);
SizeF sizeF = g.MeasureString(str, font);
g.DrawString(str, font, Brushes.Black, this.Width / 2 - sizeF.Width / 2, this.Height / 2 - sizeF.Height / 2);
}
public JtControl()
{
InitializeComponent();
this.Paint += new PaintEventHandler(JtControl_Paint);
this.MouseDoubleClick += new MouseEventHandler(JtControl_MouseDoubleClick);
}
private void JtControl_MouseDoubleClick(object sender, MouseEventArgs e)
{
if(//背景色为空)
{
//背景色为红
}
else
{
//背景色还原
}
}大概就是这样子、逻辑没想好怎么写
bool _bol = true;
private void botton1_DoubleClick(object sender, EventArgs e)
{
//其他四个按钮的Enable=Flase;
if (_bol)
{
//开关1为true;
}
else
{
//将1的Enable为false 3的为ture其他的不变
//开关1为false;
}
}
...依次类推
static变量和全局变量一样,和实例无关,每个实例看到的static变量都是同一个对象,创建新的实例不会改变static变量的取值,如果你要初始化static变量,需要给类定义一个static构造函数,static构造函数只会调用一次,不论创建多少个实例,
public delegate void MouseDoubleClick(object sender, EventArgs e);
public event MouseDoubleClick Button_MouseDoubleClick;
private void JtControl_MouseDoubleClick(object sender, EventArgs e)
{
if (Button_MouseDoubleClick != null)
Button_MouseDoubleClick(sender, e);
}//这样,你可以把控件的双击事件弄成事件,在form里面调用处理
int openindex=-1;
List<JtControl> jtlist;按钮集合
for(int i=0;i<jtlist.Count;i++)
{
jtlist[i].Button_MouseDoubleClick+=new System.EventHandler(MouseDoubleClick);
} private void MouseDoubleClick(object sender, EventArgs e)
{
JtControl jt =sender as JtControl ;
jtlist[openindex].bOpAndCl =false;
jt.bOpAndCl =true;
openindex=jt.iJtIndex
if(//背景色为空)
{
//背景色为红
}
else
{
//背景色还原
}
}
jt.bOpAndCl =true;
openindex=jt.iJtIndex
执行对应状态