데이터 바인딩 텍스트 상을 형성합니다.텍스트(제목)
-
20-09-2019 - |
문제
내가 노력하는 바인딩 Textbox.Text
하기 Form.Text
(설정하는 제목의 형식).딩 자체 작동합니다.그러나 제목이 없 업데이트될 때까지 이동 전체 형태이다.
어떻게 수행할 수 있습니까 Form.Text
업데이트되고 있는 움직이지 않고 형성하는가?고 싶 Form.Text
업데이트되고 직접 때 나는 뭔가를 입력하 Textbox.
편집;나는 설정의 제목에서 양식 TextChanged 이벤트에 의해 해 ToolStripTextbox:
public partial class ProjectForm : Form
{
public ProjectForm()
{
// my code contains all sorts of code here,
// but nothing that has something to do with the text.
}
}
private void projectName_TextChanged_1(object sender, EventArgs e)
{
this.Text = projectName.TextBox.Text;
}
과 데이터 바인딩 버전:
public partial class ProjectForm : Form
{
public ProjectForm()
{
this.projectName.TextBox.DataBindings.Add("Text", this, "Text", true, DataSourceUpdateMode.OnValidation);
}
}
Edit2:나는 나는 언급하는 것을 잊었 무언가이다.알지 못하는 경우가 아무것도 하지만 내 응용 프로그램은 MDI 응용 프로그램입니다.의 일부 제목 변경 내용:
ApplicationName [THIS CHANGES, BUT ONLY AFTER MOVING/RESIZING]
해결책
고전적인 문제는,당신은 당신 업데이트하지 않는 기존 형태의 텍스트를 제공하지만 새로운 중 하나는 보이지 않습니다.전화 Show()메소드를 변경한 후에 텍스트입니다.
수도 있습을 무효화하의 형태에 TextChanged 이벤트 것입니다 그래서 강제 재 페인트입니다.
편집 1: 이 직접 질문 을 제공할 수 있습니다 당신을 위해 대답기 때문에 당신은 MDI 응용 프로그램
Edit2: 그것은 될 수 있는 이 작업은 스레드에 안전하고 따라서 UI 스레드가 있습니다.따라서 필요하신 invoke 다른 기능을 위해 그것을 일으키는 원인이 되기 위하여 업데이트하고 있습니다.나와 유사한 문제에 상태 표시 상표입니다.여기에 몇 가지 예를 들어 코드하지 않는 경우는 방법을 알리자를 사용:
public delegate void updateFormTextD(string text);
private void formText(string text)
{
this.Text = text;
}
private void updateFormText(string text)
{
Invoke(new updateFormTextD(formText), text);
}
다른 팁
텍스트 상자의 텍스트 변경 이벤트를 사용하는 것은 어떻습니까 :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.Text = this.textBox1.Text;
}
}
나는 거의 나를 놀라게하는 것과 같은 문제가 있었다. 결국 나는 "this.text ="에 의한 내 양식 제목 업데이트 요청이 "wndproc (ref message message)"메소드에 의해 차단 된 것을 발견했습니다. WNDPROC 메소드가 끝나면 "base.wndproc (ref message)"을 추가하여 모든 메시지를 기반으로 전달합니다. 그 후 나는 "this.text ="로 내 양식 제목을 성공적으로 업데이트 할 수 있습니다.
따라서 업데이트를 위해 양식 제목을 차단하는 메소드를 찾는 것이 좋습니다.
전통적인 아이템 중 어느 것도 작동하지 않았습니다 (무효 및 새로 고침). 또한 메시지가 차단되었을 수있는 곳을 쉽게 결정할 수 없었습니다. 그러나 실을자는 것이 이것을 처리했습니다.
fForm1->Text = Title;
Thread::Sleep(0); //Allow release for title to update