質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • C#

    7663questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ComboBoxの値をコード上で設定をする方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 832

xlostdjx

score 25

C#

このようにコード書いてみたのですが動きません。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace W
{
    public partial class Form1 : Form
    {
          public class ItemSet
        {
            // DisplayMemberとValueMemberにはプロパティで指定する仕組み
            public String ItemDisp { get; set; }
            public int ItemValue { get; set; }

            // プロパティをコンストラクタでセット
            public ItemSet(int v, String s)
            {
                ItemDisp = s;
                ItemValue = v;
            }
        }

        public Form1()
        {
            InitializeComponent();

            // ComboBox用データ作成 //ListでOK //IList インターフェイスまたは 
            //IListSource インターフェイスを実装する、DataSet または Array などのオブジェクト。

            List<ItemSet> src = new List<ItemSet>();
            src.Add(new ItemSet(1, "Number1"));/// 1つでItem1つ分となる
            src.Add(new ItemSet(2, "Number2"));
            src.Add(new ItemSet(3, "Number3"));

            // ComboBoxに表示と値をセット
            comboBox1.DataSource = src;
            comboBox1.DisplayMember = "ItemDisp";
            comboBox1.ValueMember = "ItemValue";

            // 初期値セット
            comboBox1.SelectedIndex = 0;
            comboBox1_SelectedIndexChanged(null, null);
        }


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // labelに現在コンボ選択の内容を表示
            ItemSet tmp = ((ItemSet)comboBox1.SelectedItem);//表示名はキャストして取りだす
            labelDisplay.Text = tmp.ItemDisp;
            labelValue.Text = comboBox1.SelectedValue.ToString();//値はそのまま取りだせる

        }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • xlostdjx

    2018/06/01 15:44

    Windows, .NET, Visual Studio2015 です。  Items.Add に 文字と番号を設定して  その番号で switch文のcaseを分岐させるのが最終目的です。

    キャンセル

  • ponpu1601

    2018/06/01 15:50

    それを質問文の中に書いてください。また、エラーが出ているのならエラーが出ている箇所(赤の波線)にカーソルを合わせるとエラーメッセージが出るはずなのでそれも併せて書くようお願い致します。

    キャンセル

  • xlostdjx

    2018/06/04 10:23

    例えばなんですけど  cmb.Items.Add("切り捨て"); と書いたとして この時点でインデックス番号はついているのでしょうか??

    キャンセル

回答 1

checkベストアンサー

+1

ビジュアルコンポーネントを動的に作成した場合は、それぞれのコンポーネントのParentプロパティを親コンポーネントに設定しないと出てきません

comboBox.Parent = this;  //MainFormの上で出すなら

その他、Locationとかも設定してやらないと。


ソースが修正されてワケワカメに。
んじゃ最初から。

・新規にプロジェクト作成、VisualC#>Windowsフォームアプリケーションを選択
・ソースに以下を追加

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ComboBox cb = new ComboBox();
            cb.Items.Add("aaaa");
            cb.Items.Add("bbbb");
            cb.Items.Add("cccc");
            cb.Parent = this;
        }
    }


・で実行すると、
イメージ説明

・バッチシ!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 15:39

    この場合だと番号はついていないですよね??

    Items.Add に 文字と番号を設定して 
    その番号で switch文のcaseを分岐させたいのですが

    ここまでのここまでのコードを書いていただけないでしょうか??

    キャンセル

  • 2018/06/01 15:47

    なにをしたいのか、というのを質問に書きましょう

    んで、わざわざ番号書かなくても、cb.SelectedIndex で、何番目の要素が選択されたか、というのが取れるので、それでSwitch させましょう
    って、回答の例ではcbはローカル変数になってしまっているので(外から参照できない)、外で定義するなり、てきとーにアレンジしてください

    キャンセル

  • 2018/06/01 23:23

    >ここまでのここまでのコードを書いていただけないでしょうか?? ここは「思考するエンジニアのためのQAプラットフォーム」です。プログラマーへ無償で労働をさせる場所ではありません。

    キャンセル

  • 2018/06/04 10:24

    例えばなんですけど  cmb.Items.Add("切り捨て"); と書いたとして この時点で(”切り捨て”)にはインデックス番号はついているのでしょうか??

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    7663questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。