【问题标题】:Getting Label's Text From Static Method ( SOLVED )从静态方法获取标签的文本(已解决)
【发布时间】:2020-04-11 18:59:32
【问题描述】:

我正在尝试使用 label1.Text 我怎样才能从静态方法中做到这一点 (Windows 窗体)

public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam)
{         
    if (code >= 0 && wParam == (IntPtr)WM_KEYUP)
    {
        int vkCode = Marshal.ReadInt32(lParam);

        if (vkCode.ToString() == "117") //F6
        {                    
            MessageBox.Show(**label1.Text**)
        }

    return (IntPtr)1;
}

【问题讨论】:

标签: c# text static label


【解决方案1】:

假设您使用 WinForms 并且 label1Label 控制 MyForm 您必须找到 MyForm 的(正确的)实例(其中label1 如果我们有三个打开的​​MyForm 实例,我们应该使用吗?):

 using System.Linq;
 ...

 MessageBox.Show(Application
   .OpenForms
   .OfType<MyForm>()
   .Last()
  ?.label1
  ?.Text ?? "Some Default Value");

这里我们使用最后打开的MyForm实例,如果存在则得到label1;请注意,label1 必须可从hookProc 访问,即hookProcMyForm 中实现或label1 被声明为public

【讨论】:

  • @SbekS:如果问题已经解决,请提供您的解决方案(供其他人查看和使用)或将答案(提供解决方案)标记为已接受
【解决方案2】:

静态方法和属性不能访问其包含类型中的非静态字段和事件,并且它们不能访问任何对象的实例变量,除非它在方法参数中显式传递。

假设 label1 是实例变量,您应该将其文本作为参数 1 传递给您的函数

public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam, string labelText)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2010-12-16
    • 2012-06-10
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多