Como faço para ocultar a entrada de acento circunflexo em um Sistema.O Windows.Formulários.De texto?

StackOverflow https://stackoverflow.com/questions/44131

  •  09-06-2019
  •  | 
  •  

Pergunta

É necessário apresentar um comprimento variável de mensagem e permitir que o texto a ser selecionado.Eu fiz a caixa de Texto só de Leitura que não permite que o texto a ser editado, mas a entrada do acento circunflexo ainda é mostrado.

O piscar de entrada acento circunflexo é confuso.Como posso ocultar-lo?

Foi útil?

Solução

Você pode fazer através de uma chamada win32

[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
    HideCaret(someTextBox.Handle);
}

Outras dicas

Quando utilizar a chamada win32 não se esqueça de esconder o cursor na caixa de texto do evento GotFocus.

Só para completar, eu precisava de um tal funcionalidade para o uso com uma DevExpress WinForms TextEdit controle.

Eles já fornecem uma ShowCaret e um HideCaret método, infelizmente, eles estão protegidos.Portanto, eu criei uma classe derivada que fornece a funcionalidade.Aqui está o código completo:

public class MyTextEdit : TextEdit
{
    private bool _wantHideCaret;

    public void DoHideCaret()
    {
        HideCaret();

        _wantHideCaret = true;
    }

    public void DoShowCaret()
    {
        ShowCaret();

        _wantHideCaret = false;
    }

    protected override void OnGotFocus(EventArgs e)
    {
        base.OnGotFocus(e);

        if (_wantHideCaret)
        {
            HideCaret();
        }
    }
}

Para usar o código, basta usar a classe derivada, em vez do original TextEdit classe em seu código e chamar DoHideCaret() em qualquer lugar, ex:no construtor do formulário que contém o controle de edição de texto.

Talvez isso seja útil para alguém no futuro.

Se você desabilitar a caixa de texto (conjunto de Enable=false), o texto ainda é rolável e selecionáveis.Se você não gosta de apresentação visual de uma deficiência de caixa de texto (plano de fundo cinza, normalmente) que você pode substituir manualmente as cores.

Ser avisado, manualmente substituindo cores que vai fazer o seu formulário de controle/olhar estranho em sistemas que não utilizam o padrão de cor/configurações de tema.Não parta do princípio de que o controle é branco que todos controlo vai ser branco.É por isso que você deve sempre usar o sistema de cores sempre que possível (definido no System.Drawing.SystemColors enumeração), tais como SystemColors.ControlLight.

AFAIK, este não ser feito.O controlo de caixa de Texto é um engraçado de controle, porque ele realmente tem um monte de comportamento que não pode ser modificado devido à maneira como ele explora o sistema operacional.É por isso que muitos dos fresco personalizado caixas de Texto são escritos a partir do zero.

Eu tenho medo que você pode não ser capaz de fazer o que você deseja fazer :(

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top