【问题标题】:Forms, basic calculator key triggering problem表格,基本计算器按键触发问题
【发布时间】:2020-08-23 14:43:40
【问题描述】:
 private void UserInputText_KeyDown(object sender, KeyEventArgs e)
    {
        if ((e.KeyCode == Keys.D4 && e.Modifiers == Keys.Shift) || (e.KeyCode == Keys.Add))
        {
            if (String.IsNullOrEmpty(UserInputText.Text))
            {
                MessageBox.Show("Bir sayı giriniz.");
                UserInputText.Clear();
                return;
            }
            if (double.TryParse(UserInputText.Text, out sayı1))
            {
                CalculationResultText.Text = sayı1 + " + ";
                islem = "+";
                UserInputText.Clear();
            }
            else
            {

                MessageBox.Show("Sadece sayı değeri girebilirsiniz.");
                UserInputText.Clear();
            }
        }
    }

我正在编写一个基本表格计算器。当文本框聚焦并且用户按下“+”键时,我正在尝试触发添加功能并清除文本框。 “if (String.IsNullOrEmpty(UserInputText.Text))else 条件运行良好。但如果没有消息框显示为 if (double.TryParse(UserInputText.Text, out sayı1)) 条件,“+”字符保留在文本框中,如图所示。感谢您的帮助。

【问题讨论】:

    标签: c# winforms calculator


    【解决方案1】:

    如果我理解正确,您要先检查输入的字符,如果不正确,您想阻止该字符出现吗?

    如果是这样,那么当你想阻止它时,你需要设置e.Handled = true属性。

    此调用告诉 GUI 元素(您的 TextBox)“我已对此事件(即 KeyDown 事件)进行了所有检查,并且我不希望您参与处理此事件(即通常TextBox 会尝试将此字符添加到其 Text 属性中,但您会阻止它)”。

    查看KeyEventArgs.Handled 上的文档。

    【讨论】:

    • 预防效果很好。简单地说,我想在满足“if (double.TryParse(UserInputText.Text, out sayı1))”条件后清除文本框。但是无论什么原因,只有在满足此条件后,“+”字符才会保留在文本框中。
    • @CoderT 你把e.Handled() 放在UserInputText.Clear(); 后面了吗?
    • 我想我需要学习更多的编码。但是将e.Handled() 放在UserInputText.Clear(); 之后,它会给我“CS1955 不可调用成员'KeyEventArgs.Handled' 不能像方法一样使用。”错误。感谢您的帮助。
    • 当我把MessageBox.Show("Lorem Ipsum"); 放在islem = "+"; 之后,效果很好。但我不想在那里放任何消息框。
    • @CoderT 哦,等等,我的错,e.Handled 是一个属性,所以应该是e.Handled = true,我弄糊涂了
    【解决方案2】:

    KeyPress 事件使您能够防止文本框中的任何进一步更改。 感谢KeyPressEventArgsHandled 属性,您可以做到这一点

    private void UserInputText_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '+')
        {
            UserInputText.Clear();      
            e.Handled = true;
        }
    }
    

    【讨论】:

    • KeyChar 不能这样使用,e.Handled = true; 没有任何不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多