VB.NETでComboBoxをLocked = Trueにするには?

解決


VB.Net初心者  2005-03-31 14:08:31  No: 89125  IP: [192.*.*.*]

VB→VB.Netにコンバートしているのですが、
VBで行っている 
「cmbBox.Locked = True」
と同じ動きになるように.Netで書く方法がありますでしょうか?

編集 削除
medaka  2005-03-31 16:22:07  No: 89126  IP: [192.*.*.*]

以下helpより抜粋

Visual Basic 6.0 では、コントロールのテキスト ボックス部分が編集できるかどうかを決定するために ComboBox コントロールの Locked プロパティを使用していました。Visual Basic .NET では、Locked プロパティは、デザイン時にコントロールを移動できないように設定するために使用されます。Visual Basic 6.0 の Locked プロパティに直接相当するものはありません。

次の操作 

ComboBox コントロールの DropDownStyle プロパティを DropDownList に変更します。 
メモ   Visual Basic 6.0 では、Locked プロパティを true に設定すると、選択内容を変更できないように設定できました。これと同じような効果を得るには、MouseDown イベントの選択をキャンセルします。

編集 削除
VB.Net初心者  2005-03-31 19:53:19  No: 89127  IP: [192.*.*.*]

VB初心者で申し訳ございません。
medaka様ありがとうございます。
ComboBox コントロールの DropDownStyle プロパティを DropDownList に変更しましたが変化が見られませんでした。
MouseDown イベントの選択をキャンセルとはどのように書けば宜しいのでしょうか?
Private Sub ComboBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ComboBox1.MouseDown
  〜〜ここにキャンセルのようなものを書くと言うことでしょうか?〜〜
End Sub
宜しくお願いします。

編集 削除
VB.Net初心者  2005-03-31 19:53:22  No: 89128  IP: [192.*.*.*]

VB初心者で申し訳ございません。
medaka様ありがとうございます。
ComboBox コントロールの DropDownStyle プロパティを DropDownList に変更しましたが変化が見られませんでした。
MouseDown イベントの選択をキャンセルとはどのように書けば宜しいのでしょうか?
Private Sub ComboBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ComboBox1.MouseDown
  〜〜ここにキャンセルのようなものを書くと言うことでしょうか?〜〜
End Sub
宜しくお願いします。

編集 削除
・・・  2005-03-31 20:08:49  No: 89129  IP: [192.*.*.*]

そりゃ、すごいねー。

DropDownListにしたのに Text が自由に入力可能なんですかー。
それはすごいー。

編集 削除
VB.Net初心者  2005-03-31 20:33:07  No: 89130  IP: [192.*.*.*]

DropDownListでText入力はできませんが、問題はコンボボックスの▼を押し選択できないようにしたいのです。まさにVB6のLockedと同じです。
キャンセルの方法を教えてください。
宜しくお願いします。

編集 削除
外してるかな?  2005-03-31 21:10:02  No: 89131  IP: [192.*.*.*]

.NETはよく知らないけど、どのボタンを押されたかのビット情報のクリアは出来ませんか?
eの中に情報あると思うけど(e.Button?)。

編集 削除
。。。  2005-03-31 21:18:44  No: 89132  IP: [192.*.*.*]

Enabled は何のためにあるのかと、小一時間問い詰めたいんだけど。

編集 削除
外してるかな?  2005-03-31 21:24:19  No: 89133  IP: [192.*.*.*]

e.ButtonはReadOnlyみたいですね。忘れてください。
> Enabled は何のためにあるのか
よくあるのは灰色表示にしたくないからEnabledは使いたくないってパターンですよね。

編集 削除
じゃんぬねっと  URL  2005-03-31 21:32:54  No: 89134  IP: [192.*.*.*]

こんばんは、じゃんぬ です。

Enabled = False だと文字がグレーダウンするからイヤということでしょうか?
予想としては、難しいと考えます。

確かに、MouseDown は検知できますが、それをキャンセルするのはちょっと...
それと、[F4] キーも DropDown しちゃうのでそれも考慮しなくてはいけません。
[F4] のキャンセルは簡単ですが、MouseDown のキャンセルは面倒ですね。

編集 削除
VB.Net初心者  2005-03-31 21:34:32  No: 89135  IP: [192.*.*.*]

ちょっと探したのですがイベントの値取得しか見当たらないです。
何か具体的に分かりませんか?
宜しくお願いします。

編集 削除
VB.Net初心者  2005-03-31 21:37:06  No: 89136  IP: [192.*.*.*]

Enableで文字がグレーダウンは問題でありません。
リストの中身が見えるようにしたいのです。見えるけど選択できない用にです。

編集 削除
。。。  2005-03-31 22:09:36  No: 89137  IP: [192.*.*.*]

いや、Enabled = False は見えるんだけど?

編集 削除
VB.Net初心者  2005-04-01 08:53:45  No: 89138  IP: [192.*.*.*]

コンボボックッスのプルダウン▼を押してリストが見えるようにしたいのです。
Enable = Falseでは▼が押せません。リストの中身が見えません。

私のVB→VB.Netなのですが
VBの方は次のような動きです。
cmbBoxのテキストにstrAの値があり
リストにA,B,C,Dとあります。
▼を押すとABCDが閲覧できますが、cmbBox.Locked = Trueの効果で編集は不可能になっています。
これと同じようにVB.Netで行いたいのです。
どなたか解決方法が分かりましたら宜しくお願いします。

編集 削除
VB.Net初心者  2005-04-01 09:33:49  No: 89139  IP: [192.*.*.*]

↑:修正
・テキストにstrAの値→Aの値

・cmbBox.Locked = Trueの効果で編集は不可能
またリストの選択も不可能です。

です。
宜しくお願いします。

編集 削除
。。。  2005-04-01 09:34:28  No: 89140  IP: [192.*.*.*]

じゃあ、Selected〜 が変化した時にキャンセルするだけで良いのでは?
っていうか、少しは自分でやろうよ。

この手の丸投げ質問(依頼)は、放置されてもおかしくないよ。

編集 削除
VB.Net初心者  2005-04-01 10:09:25  No: 89141  IP: [192.*.*.*]

。。。様
ご忠告ありがとうございます。
頑張ります。
VB→VB.Netの問題がたくさん発生し確かにこの問題を丸投げしていました。
ただどなたか方法が分かりましたらと思いまして・・・

編集 削除
VB.Net初心者  2005-04-07 15:33:42  No: 89142  IP: [192.*.*.*]

解決しましたので載せて起きます
Windowsの内容:
1.ComboBox コントロールの DropDownStyle プロパティを DropDownList に変更する。
2.MouseDown イベントの選択をキャンセルする。

必要がある事がわかりますが、2.の MouseDown イベントをキャンセルする具体的な方法がわかりませんでした。

以下を作成

Public Class MyComboBox
    Inherits System.Windows.Forms.ComboBox
#Region " Windows フォーム デザイナで生成されたコード "
'中略
    Private blReadOnly As Boolean = False
    Private orgDropDownStyle As ComboBoxStyle
    Private iSelectedIndex As Integer
    Property isReadOnly() As Boolean
        Get
            Return blReadOnly
        End Get
        Set(ByVal Value As Boolean)
            blReadOnly = Value
            If blReadOnly Then
                orgDropDownStyle = Me.DropDownStyle
                Me.DropDownStyle = ComboBoxStyle.DropDownList
                iSelectedIndex = Me.SelectedIndex
            Else
                Me.DropDownStyle = orgDropDownStyle
            End If
        End Set
    End Property
    Protected Overrides Sub OnSelectedIndexChanged(ByVal e As System.EventArgs)
        Me.SelectedIndex = iSelectedIndex
    End Sub
End Class 
何とか自己解決です。
皆様の為になりましたらと思いまして・・・載せておきます。

編集 削除
VB.Net初心者  2005-04-25 19:51:53  No: 89143  IP: [192.*.*.*]

以前解決したと言った問題なのですが、修正が入りましたので、再度入力しておきます。

Public Class MyComboBox
    Inherits System.Windows.Forms.ComboBox
#Region " Windows フォーム デザイナで生成されたコード "
'中略
    Private blReadOnly As Boolean = False
    Private orgDropDownStyle As ComboBoxStyle = ComboBoxStyle.DropDown 
    Private iSelectedIndex As Integer
    Property isReadOnly() As Boolean
        Get
            Return blReadOnly
        End Get
        Set(ByVal Value As Boolean)
            blReadOnly = Value
            If blReadOnly Then
                orgDropDownStyle = Me.DropDownStyle
                Me.DropDownStyle = ComboBoxStyle.DropDownList
                iSelectedIndex = Me.SelectedIndex
            Else
                Me.DropDownStyle = orgDropDownStyle
            End If
        End Set
    End Property
    Protected Overrides Sub OnSelectedIndexChanged(ByVal e As System.EventArgs)
        Me.SelectedIndex = iSelectedIndex
    End Sub
End Class

編集 削除
mabu  2006-01-06 20:01:40  No: 89144  IP: [192.*.*.*]

だいぶ日付がたっていますが、MouseDownのキャンセル方法です。
WndProcを書き換えます。
WM_NCLBUTTONDOWN WM_LBUTTONDOWN WM_NCRBUTTONDOWN WM_RBUTTONDOWN 
のメッセージはMSDNを見て下さい。

    Protected Overrides Sub WndProc(ByRef m As Windows.Forms.Message)

        If Me.ReadOnly AndAlso (m.Msg = &HA1 OrElse m.Msg = &H201) Then

            Return 

        End If

        If Me.ReadOnly AndAlso (m.Msg = &HA4 OrElse m.Msg = &H204) Then

            Return 

        End If

        MyBase.WndProc(m)

    End Sub

編集 削除
。。。  2006-01-07 00:36:39  No: 89145  IP: [192.*.*.*]

じゃんぬさんが言ってたF4対策は?

編集 削除