2 zfkwhf zfkwhf 于 2017.01.06 10:23 提问

C#winform中的按钮点击事件中如何跳转到输入框输入数据才继续按钮中的事件?
如下面的代码,我要怎么跳转到输入框,好像是说manualResetEvent可以做到,可是我用了manualResetEvent会造成窗体假死,新手求大神指教,
    private void button13_Click(object sender, EventArgs e)
    {
        float totalCost = 0;
        foreach(float cost in TotalCost)
        {
            totalCost += cost;
        }
        listBox1.Items.Add("---------------------------");
        listBox1.Items.Add("您一共消费了" + totalCost + "元");
        //转到输入框输入金额,然后找钱,

    }

我想做的是一个非常简单的收银系统,消费总金额已得到并已显示到listbox控件上,现在是想在button事件中得到消费总金额后跳转到textbox中输入顾客给的钱数并找补,然后一并显示到listbox控件上,就像超市小票上一样,有个消费总额,还有顾客给的钱数,找零

4个回答

hehexiaoxia
hehexiaoxia   2017.01.06 11:49
已采纳

那你想怎么判断输入完成呢?比如输入回车?或者失去焦点?
这样的话,是不是可以考虑,在输入完成事件里面写找钱的程序。

hehexiaoxia
hehexiaoxia 回复zfk1024: 如果你要想在button_Click事件里面完成所有步骤,那么可以在事件中另外启动一个线程,线程中使用manualResetEvent.waitone()等待结果后,执行找钱。这样不会影响ui主线程,界面就不会卡死了。但是又可能面临新的问题,比如线程太多,或者共用变量,需要加锁或者同步的问题。
11 个月之前 回复
zfkwhf
zfkwhf 嗯,这样可以,但是我想在button_Click事件中得到总金额后用manualResetEvent.waitone()去等待输入框输入(这一步根本就不行,因为button事件未完成,winform界面根本无法输入),然后在输入框的回车事件中写找钱的程序并ManualResetEvent.Set(),让刚刚的button事件继续运行,不知道怎么写,还是这样不可行?初学,不是很了解,望指教
11 个月之前 回复
csmzl
csmzl   2017.01.06 14:45

一、要么就在“//转到输入框输入金额,然后找钱,”这里加个方法,这个方法实现跳出一个输入框让收银员输入收到的金额,
在这之前让程序不停循环咯(如不断判断输入框是否为空,为空继续循环,不为空则返回金额),然后继续button13的click 事件。
二、直接前台用ajax做好了。

hehexiaoxia
hehexiaoxia 如果用弹出框,倒是个好办法,使用showdialog的方法(即模态窗体),代码自然就不会往下走了,代码里面也不用写循环。
11 个月之前 回复
zfkwhf
zfkwhf 对呀,不知道这个方法怎么写,只能想到用input这个控件,还有就是直接完成button事件,再在输入框的回车事件里完成剩下的工作。ajax我没学过,其实通过这个我主要想学到的是manualResetEvent,不过还是谢谢你了
11 个月之前 回复
bdmh
bdmh   Ds   Rxr 2017.01.06 10:26

你这个代码会假死?除非TotalCost内容太多,导致循环耗时,要吗放到异步中去,要么考虑DoEvent

zfkwhf
zfkwhf 这个代码不会,是用了manualResetEvent后会假死,应该用什么方法跳转到输入框输入数据再继续button中的后续事件呢,望指教
11 个月之前 回复
czl211
czl211   2017.01.06 10:49

不知道你是不是想实现在输入框里面输入消费的金额,然后累加起来显示到界面上的功能。我做了一个小Demo,不知道能实现你想要的效果不。
在窗体里面加了两个控件,一个TextBox和一个Label,其中TextBox是你用来输入消费的金额的,Label是显示总的金额,输入框输入完成之后按Enter键
就可以将总金额显示在Label上,后台代码如下:
private double TotalCost;
public Form1()
{
InitializeComponent();
TotalCost = 0;
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.Invoke(new Action(() => {
try
{
double cost = double.Parse(textBox2.Text.Trim());
TotalCost += cost;
label1.Text = "消费总金额:" + TotalCost.ToString();
textBox2.Text = "";
}
catch (Exception ex) { }
}));
}
}

zfkwhf
zfkwhf 谢谢,不是哦,我是在做一个很简单的收银系统,想做到像超市小票上面显示的那样,totalCost是消费的总金额,已经得到了消费的总金额,下一步肯定是顾客出钱,然后找补给对方,我想在一个button事件中全部解决,目前找到的方法 是manualResetEvent,可是我不会用,就是让button等待,直到textbox中有输入顾客给的钱数,button才继续后面的找补功能,可关键是在button按钮进行时我要怎么跳到输入框输入金额,烦恼
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!