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

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

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

任意のItemをEnable=falseにしたい

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

■53575 / inTopicNo.1)  任意のItemをEnable=falseにしたい
  
□投稿者/ aki (1回)-(2010/09/19(Sun) 17:05:23)

分類:[VB.NET/VB2005 以降] 

こんにちは。

基本的な質問なのですが、、、

ComboBoxに"選択1"、"選択2"、"選択3"というItemsを追加(Add)した場合、
"選択2"だけをユーザーが選べないようにしたいです。

ComboBoxをまったく選択できないようにするには、
Me.ComboBox.Enable=false
とすればよいというのは分かるのですが、

combobox.items.item(1).enable みたいなのがありません。

どなたか分かる方、教えて頂けますでしょうか。
宜しくお願いします。
引用返信 編集キー/
■53576 / inTopicNo.2)  Re[1]: 任意のItemをEnable=falseにしたい
□投稿者/ Azulean (612回)-(2010/09/19(Sun) 17:30:20)
2010/09/19(Sun) 17:31:18 編集(投稿者)

とりあえずリンクだけ。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=27294&rev=&no=0


以前見たときから私の見解として、そんなことはできないと思っています。
(コンボボックスは選択肢を列挙するのですから、選べない候補がいるのは違和感があります)
引用返信 編集キー/
■53580 / inTopicNo.3)  Re[1]: 任意のItemをEnable=falseにしたい
□投稿者/ 魔界の仮面弁士 (1827回)-(2010/09/19(Sun) 19:04:08)
No53575 (aki さん) に返信
> 基本的な質問なのですが、、、
# 基本的かな…? (^^;


> ComboBoxに"選択1"、"選択2"、"選択3"というItemsを追加(Add)した場合、
> "選択2"だけをユーザーが選べないようにしたいです。
たとえば Form に CheckedListBox コントロールを貼っておき、
デザイナ上の [SelectionMode] プロパティから、MultiSimple を
選んでみてください。無効な値として警告メッセージが表示され、
元の値に戻されてしまいますよね。

それと同じで、"選択2" が選ばれたときに警告メッセージを表示して、
元の値に戻してしまうのが、もっとも単純な実装かと思います。


> combobox.items.item(1).enable みたいなのがありません。
もし、"選択2" を使用できないことを分かりやすくするために、
項目を淡色表示したり、あるいはクリックできないようにしたいという
意図なのであれば、単純な方法は用意されていません。

VB/C# に限らず、そういう要望は国内外で良く聞くのですけれどね…。
http://www.fret1.com/blog/silverlight-data-binding-enableddisabled-items-on-combobox/
http://bytes.com/topic/visual-basic-net/answers/825844-disable-items-combobox
http://www.vbforums.com/archive/index.php/t-315349.html
http://bytes.com/topic/net/answers/773264-c-apps-grey-out-disable-some-elements-combo-box
http://www.java2s.com/Code/Java/Swing-Components/DisabledComboBoxExample.htm


それっぽく実装しようとするならば、オーナードローで淡色表示した上で、
選択不可項目が選ばれ時に、記憶しておいた前回の値に戻すといった
大がかりなコードを記述する事になると思います。


なお、無理矢理な方法なので実用的ではありませんが、一応、
WebBrowser で HTML の <option disabled> を使うという力技もあります。
http://javascript.webcreativepark.net/sample/select-option-disabled-emulation/index2.html

# たとえば、IE8 で『http://bbs.wankuma.com/index.cgi?mode=new』のページを開くと、
# 画面下部の「分類」欄に多くの項目が表示されますが、ここで、アドレスバーに
# 『javascript:alert(document.forms[0].sel.options[5].disabled = true)』
# と入力すると、「VB6 以前」の項目が選択できなくなります。
引用返信 編集キー/
■53581 / inTopicNo.4)  Re[2]: 任意のItemをEnable=falseにしたい
□投稿者/ すなふきぬ (44回)-(2010/09/19(Sun) 21:15:40)
2010/09/19(Sun) 23:54:42 編集(投稿者)
2010/09/19(Sun) 21:23:27 編集(投稿者)

<pre><pre>■No53580 (魔界の仮面弁士 さん) に返信
> ■No53575 (aki さん) に返信
>>基本的な質問なのですが、、、
> # 基本的かな…? (^^;

基本的じゃないと思いますが。

>>combobox.items.item(1).enable みたいなのがありません。
> もし、"選択2" を使用できないことを分かりやすくするために、
> 項目を淡色表示したり、あるいはクリックできないようにしたいという
> 意図なのであれば、単純な方法は用意されていません。
>
> それっぽく実装しようとするならば、オーナードローで淡色表示した上で、
> 選択不可項目が選ばれ時に、記憶しておいた前回の値に戻すといった
> 大がかりなコードを記述する事になると思います。

それっぽくWindows Form(C#)で作ってみました。



#comboBox1_DrawItem()のDrawString()、e.Bounds.Yに補正値+1を追加

#なんか知らないけど、荒らしとか言われるのも心外なので、ソース削除しておきます。

</pre></pre>
引用返信 編集キー/

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


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

このトピックに書きこむ