【问题标题】:Update value from a form after click on object C#单击对象 C# 后从表单更新值
【发布时间】:2022-11-15 19:01:06
【问题描述】:

我有这段代码,它在点击标签后运行一个函数(MouseTracker) 这个 MouseTracker,应该在对话框结果中按下 OK 后捕获鼠标位置 x 和 y。

namespace AdvancedStashHelper
{
    public partial class Settings : Form
    {
        public int xTemp;
        public int yTemp;

        public Settings()
        {
            InitializeComponent();
        }

        private void MouseTracker()
        {
            while (true)
            {
                var result = MessageBox.Show("Move your cursor to position and press ENTER");

                if (result == DialogResult.OK)
                {
                    xTemp = MousePosition.X;
                    yTemp = MousePosition.Y;
                }
                break;
            }
        }

        private void orbTransLabel_Click(object sender, EventArgs e)
        {
            Thread thread = new(MouseTracker);
            thread.Start();

            orbTransXPos.Text = xTemp.ToString();
        }

        private void orbAltLabel_Click(object sender, EventArgs e)
        {
            Thread thread = new(MouseTracker);
            thread.Start();
        }
    }
}

这里的问题是,第一次单击标签时,没有任何反应,但是第二次单击后,该值会更新为先前的鼠标位置。

这应该是这样的:

  1. 点击标签
  2. 运行对话框,提示按回车键捕获鼠标位置
  3. 按确定后更新表单上的值
  4. 对具有不同鼠标位置值的所有标签执行此操作

【问题讨论】:

  • 为什么你会觉得奇怪? orbTransXPos.Text = xTemp.ToString(); 在您启动线程后立即运行,因为这是线程的重点。
  • 这里不需要线程。 Winforms 具有用于跟踪窗体控件上的鼠标事件的内置事件。
  • 为什么有一个线程?您想在另一个线程显示 MessageBox 之后在主线程中读取 xTemp。事情发生的顺序清晰。但是线程并行运行。因此,您已经通过使用线程将赛车条件构建到您的代码中,但您不需要做任何需要线程的事情。
  • 老实说,我是初学者,还在学习中,你能帮帮我吗?

标签: c# winforms


【解决方案1】:

感谢大家提供的信息,代码就是这样

namespace AdvancedStashHelper
{
    public partial class Settings : Form
    {
        public int xTemp;
        public int yTemp;

        public Settings()
        {
            InitializeComponent();
        }

        private void MouseTracker()
        {
            var result = MessageBox.Show("Move your cursor to position and press ENTER");

            if (result == DialogResult.OK)
            {
                xTemp = MousePosition.X;
                yTemp = MousePosition.Y;
            }
        }

        private void orbTransLabel_Click(object sender, EventArgs e)
        {
            MouseTracker();

            orbTransXPos.Text = xTemp.ToString();
            orbTransYPos.Text = yTemp.ToString();
        }

        private void orbAltLabel_Click(object sender, EventArgs e)
        {
            MouseTracker();

            orbAltXPos.Text = xTemp.ToString();
            orbAltYPos.Text = yTemp.ToString();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多