C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: コンボボックスの文字列の表示方法


(過去ログ 139 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■81634 / inTopicNo.1)  コンボボックスの文字列の表示方法
  
□投稿者/ 夜叉丸 (8回)-(2016/10/21(Fri) 08:57:44)

分類:[.NET 全般] 

Windows7 にて VisualStudio2010 C# .Net を使用しています。

タイトル通りのコンボボックスの文字の表示方法ですが

フォントのサイズを変更しないでコンボボックスのサイズを大きくして表示したいのですが
コンボボックスでは不可能なのでしょうか?

で、コンボボックスの上にラベルを重ねて表示をごまかそうとしたのですが
Label だと DropDownStyle を DropDownList にしたときの グラデーション表示ができません。
同様に Label の BackColor を Transparent にもしてみたのですがこれも有効になりません

新規に PictureBox をベースに Component を作ろうとしましたが
グラデーションのようなボックスの表示が同じようなものができません

どうするのがよいのでしょうか?




引用返信 編集キー/
■81635 / inTopicNo.2)  Re[1]: コンボボックスの文字列の表示方法
□投稿者/ shu (926回)-(2016/10/21(Fri) 09:39:08)
2016/10/21(Fri) 09:39:52 編集(投稿者)
No81634 (夜叉丸 さん) に返信
> Windows7 にて VisualStudio2010 C# .Net を使用しています。
> 
> タイトル通りのコンボボックスの文字の表示方法ですが
> 
> フォントのサイズを変更しないでコンボボックスのサイズを大きくして表示したいのですが
> コンボボックスでは不可能なのでしょうか?
頑張ればできるかもしれませんが簡単ではないかと思います。
フォントサイズは大きくしてOwnerDrawで小さいフォントにて描画するとよいかと思います。


> で、コンボボックスの上にラベルを重ねて表示をごまかそうとしたのですが
> Label だと DropDownStyle を DropDownList にしたときの グラデーション表示ができません。
グラデーションというのは2色以上の色をだんだん変化させて表示するものをいいますが合っていますか?
ハイライト表示のことであればOwnerDrawにより描画は可能です。


オーナードローサンプル:

ComboBox1のプロパティ
  DrawMode = OwnerDrawFixed (リストの行毎に高さをかえるならVariable)
  
ComboBOx1のイベント:
    Private Sub ComboBox1_DrawItem(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
        e.DrawBackground()
        Using fnt = New Font(ComboBox1.Font.Name, 8.0!)
            Dim brs = If((e.State And DrawItemState.Selected) > 0, Brushes.White, Brushes.Black)
            Dim textDraw = If(e.Index = -1, ComboBox1.Text, ComboBox1.Items(e.Index).ToString)
            e.Graphics.DrawString(textDraw, fnt, brs, e.Bounds)
        End Using
        e.DrawFocusRectangle()
    End Sub


#VB.NETで書いてしまったので適当に変換して読み替えて下さい。




引用返信 編集キー/
■81639 / inTopicNo.3)  Re[2]: コンボボックスの文字列の表示方法
□投稿者/ 夜叉丸 (9回)-(2016/10/21(Fri) 12:56:16)
2016/10/21(Fri) 13:13:37 編集(投稿者)
No81635 (shu さん) に返信
> 2016/10/21(Fri) 09:39:52 編集(投稿者)
>
ありがとうございました。
できました。

ただ、見かけは変わってしまうんですね。

ドロップダウン矢印の部分の背景が白くなるし
枠が3Dボーダーになったり

これは仕方がないものでしょうか?


引用返信 編集キー/
■81647 / inTopicNo.4)  Re[3]: コンボボックスの文字列の表示方法
□投稿者/ Azulean (727回)-(2016/10/21(Fri) 22:37:09)
見た目の感じを維持したままというのは難しいです。
自分で1から描くぐらいの覚悟を持つか、本当はいじれない部分を無理矢理いじることで無保証の世界に飛び込むかということになります。

見た目のこだわりが強い場合は、そういったコンポーネントが世の中にないか探すか、Windows Forms 以外のプラットフォームを使うかになってきます。
引用返信 編集キー/
■81653 / inTopicNo.5)  Re[1]: コンボボックスの文字列の表示方法
□投稿者/ 魔界の仮面弁士 (927回)-(2016/10/24(Mon) 10:26:19)
No81634 (夜叉丸 さん) に返信
> フォントのサイズを変更しないでコンボボックスのサイズを大きくして表示したいのですが
> コンボボックスでは不可能なのでしょうか?

手抜き実装。

private void button1_Click(object sender, EventArgs e)
{
  comboBox1.SetHeight(comboBox3.Height * 4 / 3); // 高さを3割増しにする
}

// --------------------------------

public static class ComboBoxExtension
{
  [DllImport("user32", CharSet = CharSet.Auto)]
  private static extern IntPtr SendMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);

  public static void SetHeight(this ComboBox comboBox, int comboBoxDesiredHeight)
  {
    const int CB_SETITEMHEIGHT = 0x153;
    SendMessage(comboBox.Handle, CB_SETITEMHEIGHT, new IntPtr(-1), new IntPtr(comboBoxDesiredHeight));
  }
}
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -