请帮忙看看怎么

leon51 2018-01-18 11:19:44
一个单位转换的工具,我的想法是单击鼠标左键时清空所有文本框的内容,单击鼠标中键时将文本框的内容copy到剪贴板。但是现在碰到一个问题:在文本框输入几次之后,除了文本框,其它控件比如退出按钮都没有反应。难道是MouseUp事件出了问题?
代码如下。
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
txtDm.MouseUp += new MouseEventHandler(txtM_MouseUp);
txtMm.MouseUp += new MouseEventHandler(txtM_MouseUp);
LengthConvert lengthConvert = new LengthConvert();
txtM.DataBindings.Add("Text", lengthConversion, "M", true, DataSourceUpdateMode.OnPropertyChanged);
txtDm.DataBindings.Add("Text", lengthConversion, "Dm", true, DataSourceUpdateMode.OnPropertyChanged);
}

private void txtM_MouseUp(object sender, MouseEventArgs e )
{
if (e.Button == MouseButtons.Left)
{
TabPage tp = tabControl1.SelectedTab;
ClearValue(tp);
}
if (e.Button == MouseButtons.Middle)
{
if (!string.IsNullOrWhiteSpace(((NumbericTextBox)sender).Text))
Clipboard.SetText(((NumbericTextBox)sender).Text);
}
}

public static void ClearValue(Control parContainer)
{
//
}
}



class lengthConversion
{
private double mm;

public double Mm
{
get { return mm; }
set { mm = value; }
}
public double M
{
get { return mm / 1000; }
set { mm = value * 1000; }
}
public double Dm
{
get { return mm / 100; }
set { mm = value * 100; }
}
}
...全文
522 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
测试了一下,应该是文本框被清空后,一直在等待有效数据输入 因为文本框的数据源 LengthConversion.M 和 LengthConversion.DM 都是 double 类型的,不允许为空
leon51 2018-01-19
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning的回复:
可能是因为 lengthConvert 为局部变量,被 GC 回收后造,因找不到数据源而造成死锁
好像找到规律了,当文本框为空时其它所有控件都没有反应,也就是数据源的问题?要怎么解决呢?
leon51 2018-01-19
  • 打赏
  • 举报
回复
引用 1 楼 秋的红果实的回复:
ClearValue是怎么实现的? 目测是 if (e.Button == MouseButtons.Left) { TabPage tp = tabControl1.SelectedTab; ClearValue(tp); } 因为没有选中的tab,导致了等待,假死 要知道,选中的tab,当鼠标再点击输入textBox时,焦点移到了textBox,tab就是非选中状态 ----------------------------------\0
那个就是一个递归,可能没有问题
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
可能是因为 lengthConvert 为局部变量,被 GC 回收后造,因找不到数据源而造成死锁
秋的红果实 2018-01-19
  • 打赏
  • 举报
回复
ClearValue是怎么实现的? 目测是 if (e.Button == MouseButtons.Left) { TabPage tp = tabControl1.SelectedTab; ClearValue(tp); } 因为没有选中的tab,导致了等待,假死 要知道,选中的tab,当鼠标再点击输入textBox时,焦点移到了textBox,tab就是非选中状态 ----------------------------------\0
leon51 2018-01-19
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning的回复:
其实你不声明为 double 而只是 string 不就行了? 到需要用的时候再检查转换一下
改成string也不行,可否给个demo?谢谢了
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
其实你不声明为 double 而只是 string 不就行了? 到需要用的时候再检查转换一下
leon51 2018-01-19
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning的回复:
你在清空时赋值为 0 不就行了?
可是这样文本框全是零,用户接受不了。本想着用最少的代码来实现,看来现在要另僻蹊径了
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
你在清空时赋值为 0 不就行了?
leon51 2018-01-19
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning的回复:
测试了一下,应该是文本框被清空后,一直在等待有效数据输入 因为文本框的数据源 LengthConversion.M 和 LengthConversion.DM 都是 double 类型的,不允许为空
我将属性改成可空doule类型也不可以,请问要如何处理呢?

110,533

社区成员

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

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

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