Pergunta

No meu programa após clicar no botão - entradas ListView selecionados devem ser copiados para RichTextBox. ListView contém informações de contato, e o efeito que eu quero realizar é semelhante ao de Oultook (ao escolher contatos do catálogo de contato). Parte do meu código que serve esse propósito parece com isso:

    private void toButton_Click(object sender, EventArgs e)
    {
        int start = 0;
        for (int i = 0; i < contactsListView.SelectedItems.Count; i++)
        {
            if (contactsTextBox.TextLength != 0) contactsTextBox.Text += "; ";
            start = contactsTextBox.TextLength;
            contactsTextBox.Text += contactsListView.SelectedItems[i].Text + " " + contactsListView.SelectedItems[i].SubItems[1].Text + " [" + contactsListView.SelectedItems[i].SubItems[2].Text + "]";
            contactsTextBox.Select(start, contactsTextBox.TextLength);       
            contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Underline);
            contactsTextBox.DeselectAll();
            contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Regular);
        }
    }

Infelizmente alguma forma FontStyle é herdada por todo o texto e tudo o que eu entrar depois da entrada do ListView também é sublinhado.

Então, minha pergunta é - como para sublinhar apenas alguns texto (onde eu cometi um erro)

Há tópico semelhante em stackoverflow aqui infelizmente no meu caso solução afirmou haverá desperdício de recursos.

Foi útil?

Solução

Tente isto em vez disso:

        int start = 0;
        for (int i = 0; i < contactsListView.SelectedItems.Count; i++)
        {
            if (contactsTextBox.TextLength != 0) contactsTextBox.Text += "; ";
            start = contactsTextBox.TextLength;
            contactsTextBox.Text += contactsListView.SelectedItems[i].Text +" " + contactsListView.SelectedItems[i].SubItems[1].Text + " [" + contactsListView.SelectedItems[i].SubItems[2].Text + "]";
        }


        this.contactsTextBox.Text += " ";
        this.contactsTextBox.SelectionStart = 0;
        this.contactsTextBox.SelectionLength = this.contactsTextBox.Text.Length-1;
        contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Underline);
        this.contactsTextBox.SelectionLength = 0;

Total de corte, mas, basicamente, se você selecionar o texto depois está tudo lá, mas não selecionar ALL dele (que é por isso que eu adicionar o extra " ") e, em seguida, definir o texto selecção, tem o efeito desejado .

Outras dicas

O problema com o seu código é que o SelectionFont é apenas isso - a fonte da seleção. Se não houver nenhuma seleção, a mudança da fonte não vai fazer nada. A solução que BFree oferecido parece que ele iria trabalhar. Essa é a mesma coisa que eu faria se eu estava escrevendo o documento no Word - Eu gostaria de acrescentar alguns caracteres após a seção sublinhado antes sublinhei-lo para os caracteres extras iria "salvar" a formatação original para quando eu continuou o documento.

+1 para BFree, mas eu não tenho uma reputação ainda :( ...

Antes de adicionar mais texto ao final da caixa de texto, a posição do cursor no final, e definir o tipo de letra para o estilo desejado. Em seguida, uma chamada para rtb.AppendLine () deve produzir os resultados desejados.

é a chave para lembrar que os realiza controle de RTB da mesma forma como qualquer outro processador de texto. Você definir um estilo e começar a digitar. Então tudo que você digitar depois de definir esse estilo vai assumir esses atributos que estão sob a corsor.

Update: Este parece funcionar perfeitamente.

Dim tTexts() As String = {"Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me"}
    Dim tUnderline As Boolean = False
    Dim tIndex As Integer = 0

    With oRTB
        For tIndex = tTexts.GetLowerBound(0) To tTexts.GetUpperBound(0)
            If tUnderline Then
                .SelectionStart = .Text.Length
                .SelectionFont = New Font("Arial", 12, FontStyle.Underline)
            Else
                .SelectionStart = .Text.Length
                .SelectionFont = New Font("Arial", 12, FontStyle.Regular)
            End If
            .AppendText(tTexts(tIndex))
            tUnderline = Not tUnderline
        Next
    End With
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top