sawahiko’s diary

学習ブログです

その他

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 Test_Enum
{
public enum EGains {G0, G1, G2, G3, G4, G5, G6, TL = 14}//enumの値をswitch文にも使いたい

public partial class Form1 : Form
{
private Dictionary<string, EGains> data;

public Form1()
{
InitializeComponent();

//ComboBoxのItem名とレジスタ値(enumの値)の紐付け
data = new Dictionary<string, EGains>();
data.Add("Gain0" , EGains.G0);
data.Add("Gain1" , EGains.G1);
data.Add("Gain2" , EGains.G2);
data.Add("Gain3" , EGains.G3);
data.Add("Gain4" , EGains.G4);
data.Add("Gain5" , EGains.G5);
data.Add("Gain6" , EGains.G6);
data.Add("THERMO_LEVEL" , EGains.TL);

// ComboBoxのItem名割り当て
string ss = new string[data.Count()];
int i = 0;
foreach (String k in data.Keys)
{
ss[i++] = k;
}
//string
ss = new string[] { "Gain0", "Gain1", "Gain2", "Gain3", "Gain4", "Gain5", "Gain6", "THERMO_LEVEL" };
comboBox1.Items.AddRange(ss);

comboBox1.SelectedIndex = 0;//初期値は先頭
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//7選んだらレジスタに14が入るようにする
//ここはSelectIndex=0~7しか入りようがない
//numericUpDown1.Value = EGains.[comboBox1.SelectedIndex];
this.numericUpDown1.ValueChanged -= new System.EventHandler(this.numericUpDown1_ValueChanged);

numericUpDown1.Value = (int)data[comboBox1.SelectedItem.ToString()];//[理解]Dictionaryに値が無い時はエラーになる
label_nInterlock.Text = numericUpDown1.Value.ToString();

this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged);

}

//レジスタ値代わり
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//14選んだら7が入るようにする
//6~13選んだら7が入るようにする
this.comboBox1.SelectedIndexChanged -= new System.EventHandler(this.comboBox1_SelectedIndexChanged);

//[異常系対応]0未満なら0,14超過なら14 //0来なくない? //なので無ければサーモ固定で良いかな
String retKey = data.FirstOrDefault(x => (int)x.Value == numericUpDown1.Value).Key;//Linqで逆引き //dictionaryにキーが無い時は空が返る
//if (retKey == null)
//{
// //異常値はTHERMO_LEVEL。違和感有り。おかしい値なのに設定しちゃうのはやめたい。//無視としよう
// comboBox1.SelectedItem = "THERMO_LEVEL";
// label_nInterlock.Text = data["THERMO_LEVEL"].ToString();
//}
//else
//{
if (retKey == null) { return; }//異常値は無処理が自然
comboBox1.SelectedItem = retKey;
label_nInterlock.Text = numericUpDown1.Value.ToString();

this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);

}
}
}