2017-05-06 12 views
1

WinForm 응용 프로그램에서 디자인 타임에 ToolStrip 컨트롤에 일부 표준 항목 (textBox 등) 만 추가 할 수 있으므로 다음과 같이 DateTimePicker 컨트롤을 동적으로 추가했습니다 하지만 난 여전히 위의 작동은 다음을 해봤지만 선택한 날짜 값에 대한 액세스 권한을 얻을 수동적으로 추가 된 ToolStrip 항목의 값에 액세스하는 방법

var datePicker = new ToolStripControlHost(new DateTimePicker()); 
toolStrip1.Items.Add(datePicker); 

컨트롤에서 선택한 날짜의 날짜 값에 액세스하는 방법을 잘 모르겠어요 dateTimePicker가 추가되었습니다.

DateTimePicker myDateTimePicker = new DateTimePicker(); 
var datePicker = new ToolStripControlHost(myDateTimePicker); 
toolStrip1.Items.Add(datePicker); 

티 s MSDN tutorial은 항목을 ToolStrip에 동적으로 추가하는 방법을 설명하지만 그 밖의 것은 없습니다.

당신이 식으로 DateTimePickerValueChanged 이벤트를 처리 할 수 ​​
+0

'myDateTimePicker'을 항상 폼에 접근 할 수 있도록 폼의 속성이나 필드로 만듭니다. 아마도 도구 상자 항목의 이름을 지정하고 찾을 수는 있지만 쉬운 일은 아닙니다. – Crowcoder

+0

@Crowcoder 나는'public DateTimePicker myDateTimePicker {get; 세트; }'폼 클래스에 있지만 위의 예제에서 사용하는 방법을 모르겠습니다. – nam

답변

1

:

private void Form1_Load(object sender, EventArgs e) 
{ 
    var item = new ToolStripControlHost(new DateTimePicker()); 
    ((DateTimePicker)item.Control).ValueChanged += ToolStripDatePicker1_ValueChanged; 
    item.Name = "ToolStripDatePicker1"; 
    toolStrip1.Items.Add(item); 
} 
private void ToolStripDatePicker1_ValueChanged(object sender, EventArgs e) 
{ 
    var datePicker = (DateTimePicker)sender; 
    MessageBox.Show(datePicker.Value.ToString()); 
} 

또 다른 옵션으로, 다른 버튼을 클릭 이벤트 처리기에서 DateTimePicker 컨트롤을 찾을 수있는이 방법 :

private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    var item = ((ToolStripControlHost)this.toolStrip1.Items["ToolStripDatePicker1"]); 
    var datePicker = (DateTimePicker)item.Control; 
    MessageBox.Show(datePicker.Value.ToString()); 
} 

을 참고 : 더 좋은 해결책은 ToolStripControlHost에서 파생됩니다. 이렇게하면 필요한 속성과 이벤트를 노출 할 수 있습니다. 예를 들어 Value 속성과 ValueChanged 이벤트가 포함 된 DateTimePicker 컨트롤을 노출 할 수 있습니다.

How to: Wrap a Windows Forms Control with ToolStripControlHostToolStrip에 호스트 할 사용자 지정 컨트롤을 만드는 방법을 보여줍니다. 예제를 사용하여 사용자 지정 ToolStripDateTimePicker 컨트롤을 만들면됩니다.

+0

도와 주셔서 감사합니다. 그것은 매력처럼 작동했습니다. 그것을 설명해 주셔서 감사합니다. – nam

+0

당신은 환영합니다 :) –