|
■No83863 (ふた さん) に返信 > グリッドのEditingControlShowingイベント時に、 > DataGridViewComboBoxEditingControlが既にセル幅より大きかったので、 > この段階で幅を変更しましたが反映されませんでした。
こちらでも試してみました。確かに反映されませんね。
根本的解決では無いですが、ひとまず下記のようにしてみたところ 幅が同期されているようです。確実な方法と言えるかは自信が無いですが。
DataGridView dgvTest; protected override void OnLoad(EventArgs e) { base.OnLoad(e);
dgvTest = new DataGridView() { Name = "dgv" }; dgvTest.Dock = DockStyle.Fill; dgvTest.EditMode = DataGridViewEditMode.EditOnEnter; Controls.Add(dgvTest);
dgvTest.AutoGenerateColumns = false;
dgvTest.RowCount = 100; dgvTest.ColumnCount = 4;
var cmb1 = new DataGridViewComboBoxCell(); cmb1.Items.AddRange("1", "2", "3"); dgvTest[0, 0] = cmb1;
var cmb2 = new DataGridViewComboBoxCell(); cmb2.Items.AddRange("A", "B", "C"); dgvTest[0, 1] = cmb2;
Action act = delegate { var cmb = dgvTest.EditingControl as DataGridViewComboBoxEditingControl; if (cmb != null) { int w = cmb.EditingControlDataGridView.Columns[0].Width; if (cmb.DropDownWidth != w) { BeginInvoke(new Action(() => cmb.DropDownWidth = w)); } } }; dgvTest.EditingControlShowing += delegate { act(); }; dgvTest.ColumnWidthChanged += delegate { act(); }; //dgvTest.CellMouseDown += delegate { act(); }; //dgvTest.CellContentClick += delegate { act(); }; }
|