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

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

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

コンボボックスのドロップダウンの選択について

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

■84768 / inTopicNo.1)  コンボボックスのドロップダウンの選択について
  
□投稿者/ ピヨ (1回)-(2017/08/01(Tue) 19:15:47)

分類:[.NET 全般] 

コンボボックス(cmb)とリストボックス(lbx)を配置して、
コンボボックスはドロップダウン入力するようにします。
ただし、ドロップダウンリストの代わりにリストボックスから入力できるように
するために以下のイベントを追加しました。

private void cmb_DropDown(object sender, EventArgs e)
{
 cmb.DropDownHeight = 1;
 lbx.Visible = true;
 lbx.BringToFront();
 lbx.Focus();
}

コンボボックスをクリックするとリストボックスが表示されるまではいいのですが、
最初の一回目のリストボックス入力を受け付けません。

lbx.Focus() が動作していないような動きでしょうか?
どうすればよいのでしょうか?




引用返信 編集キー/
■84770 / inTopicNo.2)  Re[1]: コンボボックスのドロップダウンの選択について
□投稿者/ 魔界の仮面弁士 (1370回)-(2017/08/01(Tue) 19:37:12)
No84768 (ピヨ さん) に返信
> コンボボックスをクリックするとリストボックスが表示されるまではいいのですが、
> 最初の一回目のリストボックス入力を受け付けません。

何故標準のドロップダウンリストでは駄目なのか、意図が読み取れなかったのですが、
ComboBox はキーボード操作でも選択できるので、そちらへの対処も忘れずに。


さて、「最初の一回目のリストボックス入力を受け付けない」というのが
どういう状態なのかを把握で来ていないのですが、
ドロップダウン中のフォーカス遷移は推奨されていませんので、
遅延処理させた方が良い気がします。
質問の意図を読みきれていないので、解決になるかどうかは分かりませんが。

public Form1()
{
  InitializeComponent();
  cmb.DropDownHeight = 1;
}

private void cmb_DropDown(object sender, EventArgs e)
{
  Application.Idle += ShowList;
}

void ShowList(object sender, EventArgs e)
{
  Application.Idle -= ShowList;
  lbx.Show();
  lbx.BringToFront();
  lbx.Focus();
}

あるいは、「ドロップダウン部」は実質未使用だというのなら、
TextBox + Button + ListBox の組み合わせに切り替えてみるとか。
引用返信 編集キー/
■84791 / inTopicNo.3)  Re[2]: コンボボックスのドロップダウンの選択について
□投稿者/ ピヨ (2回)-(2017/08/02(Wed) 18:31:15)
2017/08/02(Wed) 18:31:31 編集(投稿者)
No84770 (魔界の仮面弁士 さん) に返信

> 何故標準のドロップダウンリストでは駄目なのか、意図が読み取れなかったのですが、
> ComboBox はキーボード操作でも選択できるので、そちらへの対処も忘れずに。

最初にコンボボックスで文字列をスペースをあけて表示していたのですが
選択するときに非常に見づらくなったので右のように表示できないか試したのですが
ComboBox の DrawItems で実現できなかったのでテスト的にリストボックスを使いましたが、
グリッドを使おうと思っています。
一回目の選択ができないという症状になりました。





┌─────┐    ┌─┬─┬─┐
│1 A a│    │ │ │a│
├─────┤    │ │A├─┤
│1 A b│    │ │ │b│
├─────┤    │1├─┼─┤
│1 B c│    │ │B│c│
├─────┤ => │ ├─┼─┤
│1 C d│    │ │ │d│
├─────┤    │ │C├─┤
│1 C e│    │ │ │e│
├─────┤    ├─┼─┼─┤
│2 D f│    │ │D│f│
├─────┤    │2├─┼─┤
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
以下略
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



> 
> 
> さて、「最初の一回目のリストボックス入力を受け付けない」というのが
> どういう状態なのかを把握で来ていないのですが、
リストボックス上の項目をクリックするとコンボボックスの右側矢印の色が
変わります。もう一度クリックすると選択できるようになります。
「ドロップダウン中のフォーカス遷移は推奨されていません」
ということなので、フォーカスがコンボボックスのままで、
1回目のクリックでリストボックスにフォーカスが移動して、
2回目のクリックでリストボックスのクリック処理が可能になっていると思います。


> ドロップダウン中のフォーカス遷移は推奨されていませんので、
> 遅延処理させた方が良い気がします。
> 質問の意図を読みきれていないので、解決になるかどうかは分かりませんが。
> 
ありがとうございます。
1回目のクリックでリストボックスのクリック(イベント)処理
ができるようになりました。


> あるいは、「ドロップダウン部」は実質未使用だというのなら、
> TextBox + Button + ListBox の組み合わせに切り替えてみるとか。
確かにそういう考えもありますよね。
コンボボックスが他にもあり、見た目ここだけ外観が変わるので
コンボボックス以外の選択はまったく考えていませんでした。


引用返信 編集キー/
■84795 / inTopicNo.4)  Re[3]: コンボボックスのドロップダウンの選択について
□投稿者/ 魔界の仮面弁士 (1375回)-(2017/08/02(Wed) 19:17:47)
No84791 (ピヨ さん) に返信
>>あるいは、「ドロップダウン部」は実質未使用だというのなら、
>>TextBox + Button + ListBox の組み合わせに切り替えてみるとか。
> 確かにそういう考えもありますよね。
> コンボボックスが他にもあり、見た目ここだけ外観が変わるので
> コンボボックス以外の選択はまったく考えていませんでした。

やろうと思えば、VisualStyleElement.ComboBox.DropDownButton.何某 を
VisualStyleRenderer の Draw何某メソッドで描画することで
同じ外観を作ることができます。今回はその必要は無さそうですが。
http://dobon.net/vb/dotnet/graphics/drawvisualcontrol.html
引用返信 編集キー/
■84800 / inTopicNo.5)  Re[4]: コンボボックスのドロップダウンの選択について
□投稿者/ ピヨ (5回)-(2017/08/03(Thu) 10:21:46)
No84795 (魔界の仮面弁士 さん) に返信

ちなみに参照先のサンプルで
コンボボックスの描画をそっくりそのまま動作させると
全く違う外観になりました。

いろいろ試してみたいと思います。

ありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ