Pergunta

Estou tentando ligar um Textbox.Text para Form.Text (que define o título do formulário). A própria ligação funciona. Mas, o título não é atualizado até que eu mova todo o formulário.

Como posso alcançar Form.Text sendo atualizado sem mover o formulário? Eu gostaria Form.Text sendo atualizado diretamente quando digito algo na caixa de texto.

Editar; Definei o título do formulário em um evento de textchanged, que é disparado por uma caixa de ferramentas:

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;
}

E a versão do banco de dados:

public partial class ProjectForm : Form
{
   public ProjectForm()
   {
       this.projectName.TextBox.DataBindings.Add("Text", this, "Text", true, DataSourceUpdateMode.OnValidation);
   }
}

Edit 2: Vejo que esqueci de mencionar algo. Não sei se acrescenta alguma coisa, mas minha aplicação é um aplicativo MDI. A parte do título que muda é:

ApplicationName [THIS CHANGES, BUT ONLY AFTER MOVING/RESIZING]
Foi útil?

Solução

Problema clássico, você não está atualizando a propriedade de texto do formulário existente, mas uma nova que não é visível. Ligue para o método show () depois de alterar o texto.

Fonte

Você também pode tentar invalidar seu formulário no evento TEXTCHANGED, para forçar uma re-pintura.

Editar 1: este Pergunta de Stackoverflow Pode fornecer uma resposta para você, pois você é um aplicativo MDI

Editar 2: Pode ser que essa operação não seja segura para roscas e, portanto, o encadeamento da interface do usuário está bloqueando. Portanto, você precisa invocar Outra função para fazer com que a atualize. Eu tive um problema semelhante com os rótulos de status de status há algum tempo. Aqui está algum código de exemplo se você não souber usar os delegados:

public delegate void updateFormTextD(string text);

private void formText(string text)
{
     this.Text = text;
}

private void updateFormText(string text)
{
     Invoke(new updateFormTextD(formText), text);
}

Outras dicas

Que tal usar o evento TEXTCHANGED da caixa de texto, como este:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.Text = this.textBox1.Text;
    }
}

Eu tive o mesmo problema que quase me assusta. Eventualmente, descobri que minha solicitação de atualização de título do formulário por "this.Text =" foi bloqueada pelo método "WNDPROC (mensagem ref)". No final do método WNDPROC, adicionei "base.wndproc (mensagem ref)", que passa por todas as mensagens para a base também. Depois disso, eu poderia atualizar com sucesso meu título de formulário por "this.text =".

Portanto, sugiro que você procure um método que bloqueie o título do seu formulário para ser atualizado.

Nenhum dos itens tradicionais funcionou (invalidado e atualização); Nem pude determinar prontamente onde a mensagem poderia ter sido bloqueada. No entanto, dormir o fio cuidou disso.

fForm1->Text = Title;

Thread::Sleep(0); //Allow release for title to update
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top