여러 TextBox에서 포커스를 제거해야합니다. 나는 사용해 보았다 :
textBox1.Focused = false;
그것의 ReadOnly
속성 값입니다 true
.
그런 다음 모든 TextBox에서 제거하기 위해 양식에 포커스를 설정하려고 시도했지만 작동하지 않습니다.
this.Focus();
false
텍스트 상자가 선택되면 함수가 반환 됩니다.
그렇다면 TextBox에서 포커스를 어떻게 제거합니까?
여러 TextBox에서 포커스를 제거해야합니다. 나는 사용해 보았다 :
textBox1.Focused = false;
그것의 ReadOnly
속성 값입니다 true
.
그런 다음 모든 TextBox에서 제거하기 위해 양식에 포커스를 설정하려고 시도했지만 작동하지 않습니다.
this.Focus();
false
텍스트 상자가 선택되면 함수가 반환 됩니다.
그렇다면 TextBox에서 포커스를 어떻게 제거합니까?
답변:
포커스를 이동하려면 다른 포커스 가능한 컨트롤이 필요합니다.
포커스를 레이블로 설정할 수 있습니다. 다음에 [Tab] 키를 사용할 위치를 고려할 수 있습니다.
또한 양식으로 설정할 수 없습니다. Form 및 Panel과 같은 컨테이너 컨트롤은 Focus on을 첫 번째 자식 컨트롤로 전달합니다. 이동하려는 TextBox가 될 수 있습니다.
레이블에 집중하는 것이 저에게 효과가 없었 label1.Focus()
습니다. 양식을로드 할 때 텍스트 상자에 여전히 포커스가 있지만 Velociraptors
응답을 시도 하면 Form의 Active 컨트롤을 다음과 같이 레이블로 설정하여 저에게 효과적 이었습니다.
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = label1;
}
this.ActiveControl = panelOnMyForm;
다음 코드를 추가 할 수 있습니다.
this.ActiveControl = null; //this = form
텍스트 상자를 비활성화하고 활성화하십시오.
textBox1.Enabled = false;
은 텍스트 상자를 비활성화합니다. 로 설정 true
하면 다시 활성화됩니다.
양식 activecontrol
속성을 다음 null
과 같이 설정할 수도 있습니다.
ActiveControl = null;
이 게시물은 나를 이렇게 유도합니다.
ActiveControl = null;
이렇게하면 다른 컨트롤이 제대로 작동하지 않고 최상위 수준에서 모든 키보드 입력을 캡처 할 수 있습니다.
다른 요소에 초점을 맞출 필요가없는 것 같습니다. Windows Phone 7 응용 프로그램에서 Focus 메서드를 사용하여 텍스트 상자의 Focus 설정을 해제했습니다.
다음 명령을 내리면 포커스가 아무것도 설정되지 않습니다.
void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Focus();
}
}
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
그것은 나를 위해 일했지만 왜 그것이 당신에게 효과가 없었는지 모르겠습니다 : /
간단한 해결책은 포커스를 없애고 자신 만의 클래스를 만드는 것입니다.
public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
// constants for the message sending
const int WM_SETFOCUS = 0x0007;
const int WM_KILLFOCUS = 0x0008;
protected override void WndProc(ref Message m) {
if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;
base.WndProc (ref m);
}
}
//using System;
//using System.Collections.Generic;
//using System.Linq;
private void Form1_Load(object sender, EventArgs e)
{
FocusOnOtherControl(Controls.Cast<Control>(), button1);
}
private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
{
foreach (var control in controls)
{
if (control.GetType().Equals(typeof(TextBox)))
{
control.TabStop = false;
control.LostFocus += new EventHandler((object sender, EventArgs e) =>
{
focusOnMe.Focus();
});
}
}
}
이 문제를 해결하는 방법은 모든 winform 컨트롤을 배치하는 것입니다. 모든 레이블과 선택하지 않는 winform 컨트롤을 탭 순서 0으로 만든 다음 첫 번째 컨트롤을 탭 순서 2로 만든 다음 각 선택 가능한 컨트롤의 순서를 1 씩 증가 시키므로 3, 4, 5 등 ...
이렇게하면 내 Winforms가 시작될 때 첫 번째 TextBox에 포커스가 없습니다!
Form 또는 UserControl의 생성자에서 TextBox 쓰기
SetStyle(ControlStyles.Selectable, false);
InitializeComponent (); 이후 출처 : https://stackoverflow.com/a/4811938/5750078
예:
public partial class Main : UserControl
{
public Main()
{
InitializeComponent();
SetStyle(ControlStyles.Selectable, false);
}