Есть ли способ создать ссылку на объект из строки? - PullRequest
0 голосов
/ 13 марта 2019

Я использую формы Windows для представления некоторых параметров (например, температуры), поступающих с внешнего устройства. Я хотел бы представить эти данные в метках оконных форм и хотел бы сделать это следующим образом: 1) создать ярлык с именем в соответствии с регистром данных; 2) При чтении данных создайте строку, содержащую ссылку на объект метки в виде строки; 3) Сделайте ссылку на объект из строки и вызовите метод text (), чтобы обновить данные, хранящиеся в метке.

Пример кода, как я пытался это сделать:

// Here I create a label that is referenced by L0x7241
private System.Windows.Forms.Label L0x7241;


private void UpdateLabels(byte[] data)
        {
            // Convert bytes to register name
            var reg = new byte[2];
            reg[0] = data[1];
            reg[1] = data[0];
            // Here I construct a string, that contains the same text: L0x7241
            string associatedWidget = "L0x" + BitConverter.ToString(reg).Replace("-", "");
            // Here I would like to change text of the label
            // that has the reference that i have just constructed
            associatedWidget.Text("1111");
        }

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

Теперь я понимаю, что могу сделать то же самое, связав каждую метку с переменной и обновив их при изменении переменной. Тем не менее, я думаю, что вышеупомянутый способ сделает программу значительно меньше ...

1 Ответ

2 голосов
/ 13 марта 2019

Связывание объектов с ключами - вот для чего нужны словари.

private Dictionary<string, Label> mapping = new Dictionary<string, Label>();

public void MyForm()
{
    InitializeComponent();

    // assuming you created the labels in design time populate your dictionary here:
    mapping["L0x7241"] = labelL0x7241;
    // ...
}

private void UpdateLabels(byte[] data)
{
    string associatedWidget = GetKey(data); // whatever logic here
    mapping[associatedWidget].Text = "1111"; // change the text of the associated label
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...