作成日: 2024/05/22 最終更新日: 2025/11/05
文書種別
不具合
発生環境
.Net Framework 4.6.2/4.8、.NET 6/8
状況
修正済み
詳細
SelectionMode プロパティを Row または RowRange に設定して行全体を選択し、[Ctrl]+[C]キーでコピーしても、選択行全体がコピーされず、クリックしたセルのみがコピーされます。
※SelectionMode プロパティを ListBox にした場合は、選択行に含まれる全てのセル値がコピーされます。
※SelectionMode プロパティを ListBox にした場合は、選択行に含まれる全てのセル値がコピーされます。
回避方法
この問題は2025J v1.1(4.8.20251.721)で修正されました。
※修正版を適用しない場合の回避方法は以下の通りです。
コピー処理の前に、KeyDownイベントを使用し、Selectメソッドで行全体を選択し直します。
◎サンプルコード(VB)
※修正版を適用しない場合の回避方法は以下の通りです。
コピー処理の前に、KeyDownイベントを使用し、Selectメソッドで行全体を選択し直します。
◎サンプルコード(VB)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' クリップボード操作を許可
C1FlexGrid1.AutoClipboard = True
' データの作成(アンバウンドモード)
For i As Integer = 0 To C1FlexGrid1.Rows.Count - 1
For j As Integer = 0 To C1FlexGrid1.Cols.Count - 1
C1FlexGrid1(i, j) = i.ToString() & "_" & j.ToString()
Next
Next
' 選択モードの設定
C1FlexGrid1.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Row 'NG
'C1FlexGrid1.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.RowRange 'NG
'c1FlexGrid1.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox 'OK
End Sub
Private Sub C1FlexGrid1_KeyDown(sender As Object, e As KeyEventArgs) Handles C1FlexGrid1.KeyDown
' 回避コード
If e.Control = True And e.KeyCode = Keys.C Then
C1FlexGrid1.Select(C1FlexGrid1.Selection.TopRow, 1, C1FlexGrid1.Selection.TopRow, C1FlexGrid1.Cols.Count - 1, False)
End If
End Sub
End Class
◎サンプルコード(C#)
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// クリップボード操作を許可
c1FlexGrid1.AutoClipboard = true;
// データの作成(アンバウンドモード)
for (int i = 0; i < c1FlexGrid1.Rows.Count; i++)
{
for (int j = 0; j < c1FlexGrid1.Cols.Count; j++)
{
c1FlexGrid1[i, j] = i.ToString() + "_" + j.ToString();
}
}
// 選択モードの設定
c1FlexGrid1.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.Row; //NG
//c1FlexGrid1.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.RowRange; //NG
//c1FlexGrid1.SelectionMode = C1.Win.C1FlexGrid.SelectionModeEnum.ListBox; //OK
}
private void c1FlexGrid1_KeyDown(object sender, KeyEventArgs e)
{
// 回避コード
if (e.Control && e.KeyCode == Keys.C)
{
c1FlexGrid1.Select(c1FlexGrid1.Selection.TopRow, 1, c1FlexGrid1.Selection.TopRow, c1FlexGrid1.Cols.Count - 1, false);
}
}
}
}