4

ComboBox選択範囲やテキストがない場合に「キュー バナー」(透かし) をサポートする の拡張バージョンである WinForms コントロールがあります。私たちの制御は、CB_SETCUEBANNER を使用するこの実装に似ています。

ただし、DropDownStyleコントロールを に設定するとComboBoxStyle.DropDown(つまり、自由なテキスト入力も許可する)、キュー バナーが表示されますが、イタリック体では表示されません (通常はイタリック体で表示されます)。

モードのコンボ ボックスのキュー バナーをイタリック体で描画する方法を知っている人はいComboBoxStyle.DropDownますか?

4

2 に答える 2

7

意図的に。Style = DropDown の場合、コンボボックスのテキスト部分は TextBox です。キュー バナーを斜体以外のスタイルで表示します。このコードで確認できます。Style = DropDownList の場合は、バナーと実際の選択範囲を区別できるようにすることが重要です。斜体で表示することを選択した理由は間違いありません。TextBox は別の方法で、フォーカスを取得するとバナーを非表示にします。

非尽力的なバージョンを投入する:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class CueComboBox : ComboBox {
    private string mCue;
    public string Cue {
        get { return mCue; }
        set {
            mCue = value;
            updateCue();
        }
    }
    private void updateCue() {
        if (this.IsHandleCreated && mCue != null) {
            SendMessage(this.Handle, 0x1703, (IntPtr)0, mCue);
        }
    }
    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
        updateCue();
    }
    // P/Invoke
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, string lp);
}
于 2012-01-18T01:53:11.343 に答える