2017-11-11 2 views
0

Control 매개 변수가있는 메서드가 있습니다. 컨트롤의 가치를 얻고 싶습니다. 따라서 TextBox 인 경우 Text 속성 값을 가져옵니다. NumericUpDown 인 경우 Value 속성 값 등을 가져옵니다. 보장은 컨트롤이 이러한 속성 중 하나 가지고컨트롤의 "value"속성 얻기

Method(Control control) 
{ 
    control.Text; 
} 

또는

Method(Control control) 
{ 
    control.Value; 
} 

이 없기 때문에, 그 이름의 경우 무엇 :

문제는 내가 이런 식으로 뭔가를 쓸 수 있다는 것입니다 그것은 가지고있다. 그런 식으로 할 수있는 방법이 있습니까?

+0

(foo는이 텍스트 상자는) 경우'보고 매우 어려운 ... C#으로 구성 '이있다 그것을 향상시키고 자하는 현재의 코드와 방향을 보지 않고 얼마나 멀리 가고 싶습니까? –

+0

@AlexeiLevenkov - 글쎄, 정확히 무엇이 해결책이 될지 모르겠다. 당신이 제안한'if' 문을 시도했지만 우아하지 않습니다. 아마도 'Control'안에 값이나 그와 비슷한 것을 담고있는 속성을 가리키는 속성이있을 것이라고 생각했습니다. 나는 아무 것도 못 찾았지만 어쩌면 다른 방법이있을 것이라고 생각했습니다. – Sipo

+0

컨트롤 클래스에는 이러한 속성이 없습니다. –

답변

3

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(); 
+0

니스. 또한 의심스러운 값의 경우 그러한 가치를 얻는 것의 가치 :) - 메소드의 결과로 거칠게 다른 유형이있을 것이고 OP가 숫자, 문자열, 부울 및 더 복잡한 객체의 혼합으로 어떤 작업을 수행하는지 알기가 어렵습니다. . 그러나 이것은 확실히 그들에게 그들이 요구 한 것과 가장 가까운 것을 얻습니다. –

+1

@AlexeiLevenkov 또한이 질문의 이유에 대해 잘 알지 못하지만 나에게는 XY 문제 (https://meta.stackexchange.com/q/66377/308647) 인 것 같습니다. 그러나 영업 담당자는 컨트롤에서 가치를 얻기 위해 일부 if/else 또는 switch/case 또는 사전 접근 방식을 사용해야 함을 알아야합니다. 왜냐하면 그들은 그들이 필요한 재산을 알고 있기 때문입니다. 이 컨트롤은 속성 만 제공합니다. 예를 들어 ComboBox의 경우 값은 무엇입니까? SelectedItem, SelectedIndex, SelectedValue, Text입니까? 그것은 사용/의견을 기반으로합니다. –

+0

기본적으로 컨트롤을 매개 변수로 가져와 컨트롤의 값을 확인해야하는 메서드가 있습니다. – Sipo

관련 문제