3

ボタンをクリックした後の私のプログラムでは、選択した ListView エントリを RichTextBox にコピーする必要があります。ListView には連絡先情報が含まれており、実現したい効果は Oultook のものと似ています (連絡先から連絡先を選択する場合)。この目的を果たす私のコードの一部は次のようになります。

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

残念ながら、どういうわけか FontStyle はテキスト全体に継承され、ListView から入力した後に入力したものすべてにも下線が引かれます。

だから私の質問は - 特定のテキストだけに下線を引く方法です (私が間違えた場所)?

残念ながら、私の場合、ソリューションはリソースの無駄になると述べています

4

3 に答える 3

4

代わりにこれを試してください:

        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;

完全なハックですが、基本的に、テキストがすべて揃った後にテキストを選択しても、すべてを選択しない場合 (そのため、余分な " " を追加します)、選択テキストを設定すると、目的の効果が得られます。

于 2009-05-04T19:02:55.847 に答える
0

コードの問題は、SelectionFont がまさにそれ、つまり選択範囲のフォントであることです。選択がない場合、フォントの変更は何もしません。BFree が提供したソリューションはうまくいくようです。これは、文書を WORD で入力する場合と同じことです。下線を引く前に、下線を引いたセクションの後にいくつかの文字を追加して、余分な文字が文書を続行したときに元の書式を「保存」するようにします。

BFreeの+1ですが、まだ評判はありません:( ...

于 2009-05-04T19:42:48.200 に答える
0

テキスト ボックスの最後にテキストを追加する前に、カーソルを最後に置き、フォントを目的のスタイルに設定します。次に、rtb.AppendLine() を呼び出すと、目的の結果が得られるはずです。

RTB コントロールは、他のワード プロセッサと同じように動作することを覚えておくことが重要です。スタイルを設定して入力を開始します。次に、そのスタイルを設定した後に入力したものはすべて、corsor の下にある属性を引き継ぎます。

更新: これは完全に機能するようです。

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
于 2009-05-04T18:52:05.920 に答える