C# 单击表单标题栏时调用哪些函数?

C# 单击表单标题栏时调用哪些函数?,c#,forms,titlebar,C#,Forms,Titlebar,我有一个包含统一过程的表格。有时“某些事情”发生,使得无法对流程执行某些操作。 我发现点击标题栏可以重新执行流程中所需的操作 “某物”是我的功能: private void button1_Click(object sender, EventArgs e) { myNCServer.SendMessage(); myNCServer.SendMyObject(); position = myNCServer

我有一个包含统一过程的表格。有时“某些事情”发生,使得无法对流程执行某些操作。 我发现点击标题栏可以重新执行流程中所需的操作

“某物”是我的功能:

private void button1_Click(object sender, EventArgs e)
        {
            myNCServer.SendMessage();
            myNCServer.SendMyObject();

            position = myNCServer.GetPosition();
            compteur++;
            unityHWNDLabel.Text = "position = " + position + " (Updated " + compteur + " times)";


        }
所以我想知道到底发生了什么,这样我就可以在不点击标题栏的情况下重新启用我的流程

或者如果您对如何处理此问题有任何其他想法…=)


非常感谢

您正在尝试的将是一个肮脏的解决方法,可能会有更好的解决方案来解决您的问题。问题的原因在于其他地方,必须通过另一种方法来处理


但要回答您的特定问题,单击tite栏时会发生什么:然后您的程序会收到WM_NCACTIVATE消息()。这发生在win32 API层上,该层位于.NET之下。如果您从未使用过win32 API,您应该首先了解它的“消息泵”机制()。您可以通过PInvoke在.NET中发送win32 API消息,在.NET中使用同步SendMessage()函数()或使用asynchrounous PostMessage()函数()。这应该是解决方案的一个很好的切入点

您正在尝试的将是一个肮脏的解决方法,可能会有更好的解决方案来解决您的问题。问题的原因在于其他地方,必须通过另一种方法来处理

    private const int WM_ACTIVATE = 0x0006;
    private readonly IntPtr WA_ACTIVE = new IntPtr(1);

    private void button1_Click(object sender, EventArgs e)
    {
        things();

        SendMessage(unityHWND, WM_ACTIVATE, WA_ACTIVE, IntPtr.Zero);
    }
但要回答您的特定问题,单击tite栏时会发生什么:然后您的程序会收到WM_NCACTIVATE消息()。这发生在win32 API层上,该层位于.NET之下。如果您从未使用过win32 API,您应该首先了解它的“消息泵”机制()。您可以通过PInvoke在.NET中发送win32 API消息,在.NET中使用同步SendMessage()函数()或使用asynchrounous PostMessage()函数()。这应该是解决方案的一个很好的切入点

    private const int WM_ACTIVATE = 0x0006;
    private readonly IntPtr WA_ACTIVE = new IntPtr(1);

    private void button1_Click(object sender, EventArgs e)
    {
        things();

        SendMessage(unityHWND, WM_ACTIVATE, WA_ACTIVE, IntPtr.Zero);
    }
成功了

谢谢@Kr15

成功了


首先:谢谢你的回答。然后:有什么更好的主意吗?首先:谢谢你的回答。然后:有什么更好的想法吗?很高兴听到,你能接受和/或投票给我的答案吗?谢谢很高兴听到这个消息,那么你能接受和/或投票表决我的答案吗?谢谢