300分实现这样一个功能,大家请出来接分

Hs_Boy 2003-03-13 06:29:40
我想做一个自定义控件,实现这样一个效果,判断控件的text属性是否可以为空,通过一个属性来设置,当我设置成text控件不能为空的时候,当这个控件失去焦点的时候(或者是说当窗体的焦点从这个控件,移到另一个控件上)如果text为空,就显示MessageBox.show("不能为空"), 但是有一种特殊情况除外,就是我点击这个控件所在窗体上的一个按纽(这个按纽是关闭这个窗口),就不要提示这个“不能为空”的信息了。
我现在的问题是这样:我把这个TEXTBOX定义为不能为空,要是在这个textbox的text的值为空,同时关闭窗口的时候(点一个取消按钮)会提示出错误,问题是我不想要看到这个提示。
具体代码看这个问题:超级变态自定义TEXTBOX,请出微软专家
解决就给分,
...全文
23 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
甴曱 2003-03-15
  • 打赏
  • 举报
回复
谢谢各位的提意!
Hs_Boy 2003-03-15
  • 打赏
  • 举报
回复
现在开始一个新的问题,也是关于自定义控件的:
在.NET的控件中有一种是checklistbox,这里我想把他改一下,
把它做成下拉的多选列表框(dropdownchecklistbox,原来的占的空间太大了),和COMBOBOX很像,但是可以多选(每一项前面多一个CHECKBOX,可以选择,被选中以后把内容用分搁符|分隔后显示在dropdownchecklistbox的TEXT中)大家有什么意见,要是有人做过给点提示,有代码更好,zhailj@hotmail.com,MSN也是这个帐号!
applica2003 2003-03-14
  • 打赏
  • 举报
回复
这个,判断是否为空这个需求基本上应该放在Validated里面去完成。
不知道你是不是这么做的,因此在Validating的时候,有一个判断
是否点击了所谓取消按钮的机会,你可以试试按钮所在窗体的
ActiveControl属性,如果没有估计错误的话,在点击该按钮
触发该文本框的Validating事件时,按钮所在窗体的ActiveControl
应该已经是该按钮了。
Hs_Boy 2003-03-14
  • 打赏
  • 举报
回复
现在大部分的问题我已经解决了,现在还有一个小问题,就是怎么样得到一个自定义控件所在窗体上的所有其他的控件,因为我这个自定义控件不是一定直接就放在窗体上,我有可能放在Panel上,所以用this.parent不行。用递归查找是一种方法,还有其他的方法么,
Hs_Boy 2003-03-14
  • 打赏
  • 举报
回复
所有的问题我都解决了,谢谢给出意见的朋友,
Hs_Boy 2003-03-13
  • 打赏
  • 举报
回复
我这里又有问题了,怎么样来获取这个控件的窗口(因为我想用一个循环来找到TABINDEX比这个当前控件小一的控件,然后触发这个找到的控件的VALID事件
还有,怎么样在这个控件里触发另一个控件的ENTER事件,
Hs_Boy 2003-03-13
  • 打赏
  • 举报
回复
我也想到了楼上的说的方法,在ENTER事件中判断这个控件前一个TABINDEX的控件的VALID事件,把CANCEL按纽的TABINDEX的值设置为最小,这样就可以避免我说的退出的问题,
hbchen33 2003-03-13
  • 打赏
  • 举报
回复
如果是鼠标的话,你在另一个textbox2的enter 事件中判断,如果前一个为空则
textbox1.select()
return;
试试行不行
junqiang 2003-03-13
  • 打赏
  • 举报
回复
按钮,你可用快速按钮,不要焦点的那种不就行了。
Hs_Boy 2003-03-13
  • 打赏
  • 举报
回复
在点取消的时候已经SHOWMESSAGE了,请大家看清楚再回答,代码可以COPY下来试试
Hs_Boy 2003-03-13
  • 打赏
  • 举报
回复
解决就给分,多少都给啊,我只要有,我还有400分,
Hs_Boy 2003-03-13
  • 打赏
  • 举报
回复
还有鼠标呢,怎么控制鼠标来切换焦点
hbchen33 2003-03-13
  • 打赏
  • 举报
回复
public class MyTextBox : System.Windows.Forms.TextBox
{
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if(msg.WParam.ToInt32() == (int) Keys.Tab)
{
SendKeys.Send("{Enter}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
上面一段代码的意思是将按tab键的效果等同于按了回车键
然后在private void textBox3_KeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar == (char)13)
{
}
}
在按回车键的时候判断是否为空,如果为空则提示这样就不
cqnimin 2003-03-13
  • 打赏
  • 举报
回复
你点取消前把它设为可以为空,取消完后在把它设回来不就行了
贝贝壳壳 2003-03-13
  • 打赏
  • 举报
回复
在closing 中把属改为可以为空?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧