Control
클래스에는 Value
속성이 없습니다.
if/else 또는 switch/case 또는 사전 접근 방식을 사용하여 컨트롤에서 값을 가져와야합니다. 네가 필요한 재산이 무엇인지 알기 때문이다. 이 컨트롤은 속성 만 제공합니다.
예를 들어 ComboBox
의 경우 값은 무엇입니까? 그것입니까 SelectedItem
, SelectedIndex
, SelectedValue
, Text
? 그것은 사용/의견을 기반으로합니다.
찾고있는 것 중 가장 가까운 것은 컨트롤의 DefaultProperty
속성을 사용하여 relfection을 사용하여 해당 속성에서 값을 가져 오는 것입니다. 예를 들어,이 방법 갖는
public object GetDefaultPropertyValue(Control c)
{
var defaultPropertyAttribute = c.GetType().GetCustomAttributes(true)
.OfType<DefaultPropertyAttribute>().FirstOrDefault();
var defaultProperty = defaultPropertyAttribute.Name;
return c.GetType().GetProperty(defaultProperty).GetValue(c);
}
당신은 값이 방법을 얻을 수있는 것은 :
var controls = new List<Control> {
new Button() { Text = "button1" },
new NumericUpDown() { Value = 5 },
new TextBox() { Text = "some text" },
new CheckBox() { Checked = true }
};
var values = controls.Select(x => GetDefaultPropertyValue(x)).ToList();
(foo는이 텍스트 상자는) 경우'보고 매우 어려운 ... C#으로 구성 '이있다 그것을 향상시키고 자하는 현재의 코드와 방향을 보지 않고 얼마나 멀리 가고 싶습니까? –
@AlexeiLevenkov - 글쎄, 정확히 무엇이 해결책이 될지 모르겠다. 당신이 제안한'if' 문을 시도했지만 우아하지 않습니다. 아마도 'Control'안에 값이나 그와 비슷한 것을 담고있는 속성을 가리키는 속성이있을 것이라고 생각했습니다. 나는 아무 것도 못 찾았지만 어쩌면 다른 방법이있을 것이라고 생각했습니다. – Sipo
컨트롤 클래스에는 이러한 속성이 없습니다. –