【问题标题】:Visual Studio C #, LoopVisual Studio C#,循环
【发布时间】:2017-09-22 15:07:26
【问题描述】:

Visual Studio C#

我做了一个计算器,现在我要做一个计算器记忆(事件)。

除了计算器之外还有4个组件:一个Textbox用于计算器的答案,两个Button用于“M”和“M+”,还有一个Lable用于再次显示答案。

当用户单击“M”按钮时,应将答案文本框的内容复制到内存变量中。还要使当用户将鼠标移到标签上时,内存变量中的值将出现在此标签中,然后在鼠标移开标签时消失。还要添加一个按钮,一个“M+”按钮。当用户单击此按钮时,结果框的内容将被添加到内存中。您将需要使用全局变量来存储这些数据。

我的问题是当鼠标悬停在标签上时标签没有出现,当鼠标离开标签时它也没有消失。我该如何解决?

另外,这种方式是使用全局变量的正确方法吗?

下面是我的代码(我只是放了“M”和“M+”按钮的代码,而不是计算器的代码)。

    private String ans;
    private Double answer;
    private Double answerPlus;

    private void btnM_Click(object sender, EventArgs e)
    {
        ans = txtDisplay.Text;
        answer = double.Parse(ans);
        lblblank.Text = answer.ToString();
    }

    private void lblblank_MouseEnter(object sender, EventArgs e)
    {           
        lblblank.Show();           
        lblblank.Text = answer.ToString();
    }

    private void lblblank_MouseLeave(object sender, EventArgs e)
    {
        lblblank.Hide();
    }

    private void btnMplus_Click(object sender, EventArgs e)
    {
        answerPlus = answer + double.Parse(ans);
        lblblank.Text = answerPlus.ToString();
    }

【问题讨论】:

  • 我的猜测是您将这些事件绑定到标签而不是按钮。所以你在等待鼠标输入一个不可见的标签。
  • 不要隐藏/显示标签,只需将其文本设置为空白或您要在其中显示的值。

标签: c# visual-studio


【解决方案1】:

存储变量
您存储值的方式很好。

活动
一旦你调用 .Hide() ,下一个 MouseEnter/MouseLeave 事件将不再被触发。您可以做的是将面板或任何布局元素作为标签的包装器/父元素,然后将事件回调调整为类似的东西:

 private void panel_MouseEnter(object sender, EventArgs e)
 {           
     lblblank.Show();           
     lblblank.Text = answer.ToString();
 }

 private void panel_MouseLeave(object sender, EventArgs e)
 {
     lblblank.Hide();
 }


编辑
~~~

任何布局元素作为父元素是什么意思 标签?你能解释更多吗?

我的意思是创建一个新面板(或布局元素)并将标签作为子项放入其中。见下图:

如果设置正确,我在上面发布的代码 sn-p 就可以正常工作。此解决方案不会阻止鼠标进入标签时触发 MouseLeave 事件。因此,您可以使用使用 MouseMove 事件的替代解决方案。

替代方案

using System;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            this.InitializeComponent();

            // Subscribe to the MouseMove event
            this.panel.MouseMove += this.panel_MouseMove;
        }

        private void panel_MouseMove(object sender, MouseEventArgs e)
        {
            // Checks if current mouse position is within the panel
            if (this.panel.Bounds.Contains(new Point(e.X, e.Y)))
            {
                // Current mouse position within the panel
                this.label.Show();
                return;
            }

            // Current mouse position outside the panel
            this.label.Hide();
        }
    }
}

【讨论】:

  • 当我使用面板时,它会做同样的事情。数字出现在标签中,但不会消失。那么,我还能尝试什么其他方法?将任何布局元素作为标签的父元素意味着什么?你能解释更多吗?
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多