C# .NET WinForm이 있습니다. 이 양식에서는 사용자가 ListView에서 항목을 두 번 클릭하여 ListView에 추가 할 수 있습니다. 이렇게하면 TextBox 컨트롤이 ListView에 추가되고 사용자가 입력 할 수 있도록 TextBox에 키 커서가 놓입니다.Control.Leave MouseUp이 아닌 MouseDown에 의해 트리거 됨
사용자가 몇 가지 방법으로 항목을 완료했다는 것을 감지합니다 (예 : Enter, Esc, Tab ...). 그러나 TextBox를 나가기 (TextBox.Leave) 할 때도 마찬가지입니다.
문제는이 단계 세트입니다 :
- 사용자가 텍스트 상자의 바깥 아래로 마우스를 가져 가면 TextBox.Leave을 트리거합니다.
- 새 항목을 ListView에 추가합니다.
- ListView에서 새 항목을 선택합니다.
- 마우스가 올라가고 방금 선택한 새 항목이 포커스를 잃고 선택 취소됩니다.
TextBox.Leave는 MouseUp이 아닌 MouseUp에 의해 트리거됩니다. 이것을 어떻게 할 수 있습니까?
편집 : 코디는 ListView.LabelEdit 속성을 사용하도록 제안합니다. 사용자를 두 번 클릭 어디에 새 항목이 표시됩니다 때
listView_DoubleClick(...) {
listView.LabelEdit = true;
if(double clicked on existing listViewItem) {
listViewItem.BeginEdit(); //this works as expected
} else {
var newItem = listView.Items.Add("");
newItem.BeginEdit(); //this doesn't work, see below
}
}
newItem.BeginEdit에 대한 호출은()는 작품 : 여기에 그 시도 내 결과입니다. 목록보기에서 다른 빈 영역을 두 번 클릭하면 새 항목이 추가되지만 편집 모드로 전환되지 않습니다. 무슨 일 이니?
'ListView'컨트롤에 행을 추가하는 것은 매우 이상한 방법입니다. 왜 당신은 별도의'TextBox' 컨트롤이 필요합니까? ['LabelEdit' 속성 (http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.labeledit.aspx)을 True로 설정해 보셨습니까? 또는 사용자가 런타임에 항목을 추가 할 수 있도록 허용해야하는 경우 'DataGridView'컨트롤 사용을 고려할 것입니다. –
@Cody - 지금 LabelEdit을 시도하고 있지만 이상한 동작을보고 있습니다. 내 업데이트를 참조하십시오. – Chad