自分DataGridView
だけを使って物事を表示したいのですが、ユーザーが行、フィールド、またはから何かを選択できないようにしたいのDataGridView
です。
これどうやってするの?
自分DataGridView
だけを使って物事を表示したいのですが、ユーザーが行、フィールド、またはから何かを選択できないようにしたいのDataGridView
です。
これどうやってするの?
私はこれで行きます:
private void myDataGridView_SelectionChanged(Object sender, EventArgs e)
{
dgvSomeDataGridView.ClearSelection();
}
DataGridView
noを選択不可にするべきだという幅広い主張には同意しません。一部の UI はツールやタッチスクリーン用に構築されており、選択を許可すると、ユーザーは、選択すると実際にそれらがどこかに到達すると誤解されます。
コントロールの設定ReadOnly = true
は、セルまたは行を選択できるかどうかには影響しません。また、設定には視覚的および機能的な欠点がありますEnabled = false
。
もう 1 つのオプションは、コントロールの選択された色を、選択されていない色とまったく同じになるように設定することですが、セルの背景色を操作している場合、この方法でも厄介な結果が生じます。
次のように、選択したセルに透明な背景色を設定できます。
DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent;
Enabled
プロパティを に設定することでこれを修正しましたfalse
。
理論的にはuser4101525の回答が一番気に入りましたが、実際には機能しません。選択はオーバーレイではないので、コントロール下にあるものは何でも見ることができます
Ramgy Borja's answer は、デフォルトのスタイルが実際にはまったく色ではないという事実を扱っていないため、それを適用しても役に立ちません。これはデフォルトのスタイルを処理し、独自の色を適用する場合に機能します (これは edhubbell が厄介な結果と呼んでいるものかもしれません)。
dgv.RowsDefaultCellStyle.SelectionBackColor = dgv.RowsDefaultCellStyle.BackColor.IsEmpty ? System.Drawing.Color.White : dgv.RowsDefaultCellStyle.BackColor;
dgv.RowsDefaultCellStyle.SelectionForeColor = dgv.RowsDefaultCellStyle.ForeColor.IsEmpty ? System.Drawing.Color.Black : dgv.RowsDefaultCellStyle.ForeColor;
プロパティを使用するDataGridView.ReadOnly
MSDNの例のコードは、主に表示を目的とDataGridView
したコントロールでのこのプロパティの使用法を示しています。この例では、コントロールの外観はいくつかの方法でカスタマイズされており、コントロールは限られた対話性のために構成されています。
サンプルコードで次の設定を確認してください。
// Set property values appropriate for read-only
// display and limited interactivity
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.AllowUserToOrderColumns = true;
dataGridView1.ReadOnly = true;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.MultiSelect = false;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
dataGridView1.AllowUserToResizeColumns = false;
dataGridView1.ColumnHeadersHeightSizeMode =
DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
dataGridView1.AllowUserToResizeRows = false;
dataGridView1.RowHeadersWidthSizeMode =
DataGridViewRowHeadersWidthSizeMode.DisableResizing;