Получение текста метки из метода Stati c (решено) - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь взять label1.Text, как я могу сделать это с помощью метода c (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;
}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Предполагая, что вы используете WinForms и label1 - это Label элемент управления MyForm, вы должны найти (справа) экземпляр из MyForm (который * 1009) * должны ли мы использовать, если у нас есть, скажем, три открытых MyForm экземпляра?):

 using System.Linq;
 ...

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

Здесь мы используем последний открытый экземпляр MyForm и если он существует, получим label1; обратите внимание, что либо label1 должно быть доступным из hookProc, т. е. hookProc реализовано в MyForm или label1 объявлено как public.

0 голосов
/ 11 апреля 2020
Методы и свойства

Stati c не могут получить доступ к полям и событиям не-stati c в их содержащем типе, и они не могут получить доступ к переменной экземпляра любого объекта, если она явно не передана в параметре метода.

Предполагая, что label1 является переменной экземпляра, вы должны передать ее текст как 1 из параметров вашей функции

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