• 締切済み

コンボボックスのtag情報の取得方法

VB.NET 初心者です。 コンボボックスに隠し情報としてTagにidを設定しておき 後でボタンが押下された時にそのTagからidを取得し、次の 処理を行う様にしたいと考えております。 簡単な構成は以下のようになってます。 '構造体A Public Structure A Dim id As String Dim name As String End Structure Dim Tag(1) As A Dim Item(1) As String Tag(0) = 1 Tag(2) = 2 Item(0) = "データ1" Item(1) = "データ2" ' コンボボックスに値の設定 cboData.Items.AddRange(KeyItems) cboData.Tag = TagItems ボタンが押下された時に選択されている項目のidの取得方法を 教えて頂きたいと思います。よろしくお願い致します。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

書かれていた、既存のソースから、したいことを十分に理解できませんでした。 特に突然出てきた「KeyItems」と「TagItems」は全く理解できません。 それ以外の変数も、変数名の規約違反っぽいです。 そこで簡単なサンプルを張っておきます。 したい事と、違う部分があれば言って下さい。 #Regionの自動生成部は無視してください。 Public Class Form1   Inherits System.Windows.Forms.Form   Const DEF_ARRAY_MAX As Integer = 10   Public Structure A     Dim id() As String     Dim name() As String   End Structure   Dim myItme As A #Region " Windows フォーム デザイナで生成されたコード "   Friend WithEvents Button1 As System.Windows.Forms.Button   Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox   などなど。。。 #End Region   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     Dim i As Integer     ReDim myItme.id(DEF_ARRAY_MAX)     ReDim myItme.name(DEF_ARRAY_MAX)     For i = 0 To DEF_ARRAY_MAX       myItme.id(i) = ((i + 1) * 100).ToString       myItme.name(i) = String.Concat("データ", StrConv((i + 1).ToString, VbStrConv.Wide))     Next i     ComboBox1.Items.AddRange(myItme.name)   End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     If ComboBox1.SelectedItem Is Nothing Then       Me.Text = "未選択"     Else       Me.Text = String.Concat( _             "タグ番号=", myItme.id(ComboBox1.SelectedIndex) _              )     End If   End Sub End Class

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB.NET)コンボボックスの連動について

    失礼いたします、コンボボックスを連動させるプログラムを書いているのですがうまく連動しません、よろしければお知恵をお貸しくださいませ コードを書くにあたりの条件は、開発はVisual Basic 2005のVisual Basic データベースから呼び出す場合ならAccess 2003を使用(今現在は使用しないで開発しています) Access内でコンボボックスを、Excelでコンボボックスをなどはしません…今回はVBでコンボボックスを連動させたい 今回ちょっと公に出来ない箇所があり記号で伏せさせていただきますが、記号は日本語が入ります Form1でload(ロードってこれであってましたっけ?)部分に以下を記載 dim strdata as string = {"●●","●●","●●"} (すみません、あと一文あったのですがちょっと思い出せないので) それで連動するcomobox2には以下を記載 dim strdata as string = {"●●","●●"} dim i as integer select case strdata(i) case 0 combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") case 1 combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") となり、combobox1で最初の●●が選ばれればcombobox2のcase0を表示させるようにしたいと思っていますが上手く表示が出ません 今週中に仕上げなければいけないので昨日今日と色々調べてみたのですが、VBAやAccess・Excel関係が殆どでVBのが見つからずAccessやExcelのを見ても上手くいかなかったのと、解説が良く分からなかったので、分かりやすく解説をお願いします

  • コンボボックスのマウスホイールを無効にしたい

    DataGridView内にコンボボックスを設定しております。 マウスのホイールボタンは、DataGridViewの縦スクロールに 使いたいのですが、DataGridView内のコンボボックスに カーソルがある場合、コンボボックス内のデータが変わってしまいます。 ユーザー側と打ち合わせた結果、コンボボックスにカーソルが ある時に、マウスのホイールボタンを無効に出来ないかと 言われております。 色々調べてみましたが、私では分からず、教えて下さい。 (サンプルソース) Dim column1 As New DataGridViewComboBoxColumn() With DataGridView1 .Columns.Clear() .Columns.Add("Col01", "列1") With column1 .Items.AddRange(New String() {"Item01", "Item02", "Item03"}) .Name = "Col02" .HeaderText = "列2" End With .Columns.Add(column1) For i As Integer = 0 To 100 .Rows.Add() Next i End With

  • コンボボックスについて教えてください!!

    タイトルが適していないかも知れませんが、 以下の内容についてわからず困っているので教えて頂きたく投稿します。 【プログラム】VisualBasic2005 【データベース】Access 【質問内容】 コンボボックスで選択した内容によって、ボタンを押下するとラベルに一致する内容のデータをデータベースから取得し表示する方法。 例えば… フォームに商品名を選択するコンボボックスがあります。 データベースの中身は、以下のようになっています。  ___________ | 商品名  | 金額  | | りんご   | 150   | | もやし   | 50    | | 豆腐    | 60    | | キャベツ | 200    |  ―――――――――――  《T1商品》 ※商品名はかなりの量があります。 このとき商品名(※コンボボックス名をSyohinと定義)に"りんご"を選択した場合、 値段(※ボタン名をNedanと定義)を押下すると 金額(※ラベル名をKingakuと定義)に150と表示したいです。 今の私のコードを乗せておきます。 これだとどの商品を選択しても1行目の150が表示されてしまいます。 あと何を追加したらよろしいのでしょうか? Private Sub Nedan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nedan.Click '値段を押下 '▼データ取得 Dim Cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Documents and Settings\My Documents\商品ツール.mdb") Dim SQLCm As OleDb.OleDbCommand = Cn.CreateCommand SQLCm.CommandText = "SELECT 金額 FROM T1商品" Dim Value As String Cn.Open() Value = SQLCm.ExecuteScalar Cn.Close() Kingaku.Text = (Value) End Sub 質問のしかたでわかりづらいかも知れませんが… わかる方がいらしたらご教授願います。 長文、失礼致しました。

  • エクセル/マクロ コンボボックスからの検索とセル位置の取得

    エクセル/マクロに関する質問です。あるワークシートのA列に日付、B列にその日付に対応した商品の名前が入っています。データは日付順に並んでいます。A列の中には重複する日付もあります。ユーザーフォームを使用して、ある一定の期間内のデータを新しいシートにペーストしたいと考えています。 ユーザーフォームには2つのコンボボックス、1つのテキストボックスを設置しました。コンボボックスAでは、コピーしたいデータが始まる日付が選択できるようになっており、コンボボックスBではコピーしたいデータの最後の日付が選択できるようになっています。 Private Sub UserForm_Initialize() Dim DateList1 As New Collection Dim Row1 As String, TopCell1 As String, BottomCell1 As String Dim CellRange1 As Range, EachCell1 As Range Row1 = "A" TopCell1 = Row1 & "3" BottomCell1 = Row1 & "65536" With Worksheets("AAA") Set CellRange1 = .Range(.Range(TopCell1), .Range(BottomCell1).End(xlUp)) End With For Each EachCell1 In CellRange1 On Error Resume Next DateList1.Add EachCell1.Value, CStr(EachCell1.Value) If Err.Number = 0 Then Me.ComboBoxA.AddItem EachCell1.Value End If On Error GoTo 0 Next End Sub テキストボックスでは新しいシートの名前を入力できるようにしています。 コンボボックスA、Bで選んだ項目に一致するセルの行番号を取得しその範囲をコピー、新しいシートにペーストしたいと考えています。さらにコンボボックスAの日付がBをこえないようにしたいとも考えています。 できるだけシンプルなコードで表現したいのですが、なかなか上手くいきません。スマートなアイデアをお持ちの方がいらっしゃれば、アドバイスを頂きたいと思います。どうぞよろしくお願いします。

  • 変数に取得した値をテキストボックスやコンボボックスに表示させた

    アクセスで、変数に取得した値をテキストボックスやコンボボックスに表示させたいと思っています。例えば、まずクエリをひとつ作成します。そのクエリのレコードをループで配列変数に取得していきます。フィールド(IDと名前)レコード(件数は2件とします) public ID(2) as String public 名前(2) as String Sub temp() Dim Db As Database Dim rs As Recordset Dim I As Integer Set Db = CurrentDb Set rs = Db.OpenRecordset("Q_クエリ", dbOpenDynaset) rs.MoveFirst For I = 1 To 2 If IsNull(rs![ID]) = False Then ID(I) = rs![ID] If IsNull(rs![名前]) = False Then 名前(I) = rs![名前] rs.MoveNext Next I rs.Close Db.Close End Sub (この時点で変数に値は入っているようです。) フォームで作成したテキストボックスやコンボボックスに実行ボタンをクリックすると表示するというコードは下記のように記述してみました。 Private Sub 実行_Click() Call temp (標準モジュールを呼び出す) ID = ID(1)     名前 = 名前(1) (2)省略 End Sub すると、かならず「実行時エラー'13'; 型が一致しません。」とエラーが出ます。なにぶんVBA初心者になりますので、ご教授お願い致します。ちなみに同じような方法で、同一フォーム内に2つテキストボックスを用意し、片方に値を入力して実行するともう一方のテキストボックスにその値が表示すると言う実験は成功しています。もっと他に良いコードがあれば教えて下さい。お願いします。

  • コンボボックスのSelectedItemの使い方

    エリアテーブルを取得し コンボボックスの見える値は「値」にして コンボボックスを取得するときには「コード」を 取れるようにしたいと思っています。 どのように書くと取得できるのでしょうか? バインドするやり方が分からなくて 下記のようになっています。 Dim strSql As String Dim dr As SqlClient.SqlDataReader = Nothing Dim daAdp As New SqlClient.SqlDataAdapter Dim cmd As New SqlClient.SqlCommand Dim ds As DataSet = New DataSet() mConn = New SqlConnection 'DBのオープン  Conn.DbConnect()   Dim dbCmd As SqlCommand = Nothing 'SQL発行 strSQL = "SELECT コード,値 " strSQL = strSQL & "FROM エリア" Conn.ExecSqlSelect(strSql, dr)   ComboBox1.Items.Clear() Do While dr.Read ComboBox1.Items.Add(dr.GetString(1)) ComboBox1.SelectedItem = dr.GetString(0) Loop

  • テキストボックスかコンボボックスを条件としたい

    フォーム上のコントロールを取得する時に、 「テキストボックスかコンボボックスなら」としたいのですが、VBAコードがわかりません。 ************************************************************ Sub Sample() Dim myCtrl As Control Dim myForm As String myForm = "フォーム1" For Each myCtrl In Forms(myForm).Controls If myCtrlのタイプがテキストボックス Or コンボボックス Then Debug.Print myCtrl.Name End If Next End Sub ************************************************************ に修正していただけますか? ControlType プロパティを使うと思うのですが、使い方がわかりません。 ご回答よろしくお願いします。

  • CSVの一行目をコンボボックスに表示させたい

    毎回質問ばかりですみません。 CSVの一行目の","を起点にして分割をして そのあと分割したものをコンボボックスの一覧に入れたいのですが なかなかうまくできません。 Dim delimiter As String = "," dim txtf2 As New IO.StreamReader(ファイル保存場所,System.Text.Encoding.Default) IDset = txtf2.ReadLine Dim a As String() = IDset.Split(delimiter) とここまではできるのですが それをコンボボックスに追加する方法がわかりません。 IDsetが不特定な数を想定してるので for nextなどでとは考えているんですがうまくプログラミングができません。 指導いただけるとうれしいです。

  • マウスを使わずにコンボボックスの内容を選択するには

    いつもお世話になっています。 Access2000で、マウスを使わずにコンボボックの内容を選択したいのですが、↓ボタンを押下してもデータが選択されず、困っています。↓ボタンを押してしまうと、次のテキストボックスやコンボボックに遷移してしまいます。(TABキーと同じ働きをしてしまいます。) KeyDownイベントを使用したらうまくいくのかと思いコーディングしたのですが、やはり、選択できませんでした。どのようにしたら、↓ボタンを押下してコンボボックの内容を取得できるでしょうか。 どなたかご教授お願いします。

  • VBA コンボボックスのリストをセルから取得

    VBAでのコンボボックスのリストをセルD7~セルの中にデータが空になっている所まで、セルから取得しコンボボックスに入れたいのですが・・ Dim celJ As Integer  celJ = 4  Do Until Cells(7,celJ).Value = ""   ComboBox1.AddItem (Worksheets("表").Cells(7, celJ).Value)   celJ = celJ + 1 Loop これでは失敗するのですが、どうすればいいでしょうか? 最初D7には何もデータが入っていません。どんどんD7~からデータを書き込んでいき、コンボボックスにも反映させていきたいのですがアドバイスお願い致します。