object b = new Button();
b.GlueValue(567);
/////
int value = b.GetValue();
У класса Button
в WinForms есть свойство Tag
типа данных object
. Туда можно положить все что хочешь. И потом при клике делать, напрмер:
var btn = sender as Button
var btnProperty = btn.Tag as T // где T - желаемый тип
Используйте возможности ООП. Создайте класс кнопки со значением:
public class ValueButton : Button
{
private int _value;
public void SetValue(int value)
{
_value = value;
}
public int GetValue()
{
return _value;
}
}
При желании, можно создать любое количество свойств/полей любого типа.
Другой вариант. Используем методы расширения.
public static class Extensions
{
public static void SetValue(this Control control, int value)
{
control.Tag = value;
}
public static int GetValue(this Control control)
{
return (int)control.Tag;
}
}
Теперь у любого объекта типа Control
(а это все gui-объекты WinForms) есть методы сохранения-получения значения. Но для хранения используется свойство Tag
, что ограничивает нас одним значением (можно при желании коллекции использовать).
Следующий способ добавляет методы расширения к типу object
, то есть ко всем типам.
public static class Extensions
{
static Dictionary<object, int> dict = new Dictionary<object, int>();
public static void SetValue(this object @object, int value)
{
if (dict.ContainsKey(@object))
dict[@object] = value;
else
dict.Add(@object, value);
}
public static int GetValue(this object @object)
{
if (dict.TryGetValue(@object, out int value))
return value;
else
return default(int);
}
}
Естественно, это правильно работает только со ссылочными типами.
Для значимых типов и ссылочных типов, копируемых по значению (например, string
), value будет добавляться именно к значению, а не к переменной.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть веб-приложение в котором я отображаются некоторые данные, я хочу с бд выгрузить данные в xml
У меня есть таблица со следующими данными: