作成日: 2014/09/26 最終更新日: 2022/10/27
文書種別
使用方法
詳細
FlexGridには、コマンドボタンを表示する機能は用意されていませんが、代替案として、以下のような方法が考えられます。
1. セルボタンの機能を利用する
2. Buttonコントロールをホストする
3. カスタムエディタにButtonコントロールを使用する
1.については、製品ヘルプの「セルボタン」の項をご覧ください。
2.の「コントロールをホスト」については、製品付属の「HostControlsサンプル」で設定コードを紹介しています。また、以下のナレッジでも、ラジオボタンですが、ホストコントロールとして表示する方法を案内しています。
◇ナレッジベース
[FlexGrid for WinForms] セルにラジオボタンを表示する方法
3.は、列のEditorプロパティにButtonコントロールを指定し、列のスタイルでBackGroundImageプロパティにボタンの画像を設定して表示しておき、FlexGridのMouseEnterCellイベントでマウスが当該列をポイントした時に、コードからポイントされたセルを編集モードにする、という方法です。
これにより、マウスでポイントされていないセルには画像が表示され、ポイントしたセルには、カスタムエディタに設定されたButtonコントロールが表示されるため、外観も変わり、すぐにクリック可能となりますので、ボタンが常時表示されているように見せかけることが可能です。
また、クリックされた時の処理は、ButtonコントロールのClickイベントに記述します。
(2022.10.27 更新)
方法3で、ボタンクリック時にbtn1_Clickイベントが2回発生する問題を修正しました(VBコード)。
・修正前
◎サンプルコード(VB)
◎サンプルコード(C#)
1. セルボタンの機能を利用する
2. Buttonコントロールをホストする
3. カスタムエディタにButtonコントロールを使用する
1.については、製品ヘルプの「セルボタン」の項をご覧ください。
2.の「コントロールをホスト」については、製品付属の「HostControlsサンプル」で設定コードを紹介しています。また、以下のナレッジでも、ラジオボタンですが、ホストコントロールとして表示する方法を案内しています。
◇ナレッジベース
[FlexGrid for WinForms] セルにラジオボタンを表示する方法
3.は、列のEditorプロパティにButtonコントロールを指定し、列のスタイルでBackGroundImageプロパティにボタンの画像を設定して表示しておき、FlexGridのMouseEnterCellイベントでマウスが当該列をポイントした時に、コードからポイントされたセルを編集モードにする、という方法です。
これにより、マウスでポイントされていないセルには画像が表示され、ポイントしたセルには、カスタムエディタに設定されたButtonコントロールが表示されるため、外観も変わり、すぐにクリック可能となりますので、ボタンが常時表示されているように見せかけることが可能です。
また、クリックされた時の処理は、ButtonコントロールのClickイベントに記述します。
(2022.10.27 更新)
方法3で、ボタンクリック時にbtn1_Clickイベントが2回発生する問題を修正しました(VBコード)。
・修正前
Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
・修正後)Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
◎サンプルコード(VB)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ボタンのキャプションとなるデータを
' セルデータとして設定
Dim i As Integer
For i = 1 To flex.Rows.Count - 1
flex(i, 3) = "..."
Next
' Buttonコントロールのキャプションが
' 表示されるように行の高さを設定
flex.Rows.DefaultSize = 20
' 3列目に通常時の背景画像を設定
flex.Cols(3).StyleNew.BackgroundImage = Image.FromFile("..\..\btn_normal.jpg")
flex.Cols(3).Style.BackgroundImageLayout = ImageAlignEnum.Stretch
flex.Cols(3).Style.TextAlign = TextAlignEnum.CenterCenter
' 3列目は、カスタムエディタに
' Buttonコントロールを設定
Dim btn1 As Button = New Button()
AddHandler btn1.Click, AddressOf btn1_Click
btn1.BackColor = SystemColors.Control
btn1.TextAlign = ContentAlignment.MiddleCenter
flex.Cols(3).Editor = btn1
End Sub
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
' 3列目のデータ行の場合、マウスポインタが
' セル上に置かれたら、セルを編集状態にし、
' カスタムエディタのボタンを表示
If e.Col = 3 And e.Row >= 1 Then
flex.StartEditing(e.Row, e.Col)
End If
End Sub
Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
' Buttonコントロールがクリックされた時に
' メッセージを表示
MessageBox.Show("ボタンが押されました")
End Sub
' ボタンのキャプションとなるデータを
' セルデータとして設定
Dim i As Integer
For i = 1 To flex.Rows.Count - 1
flex(i, 3) = "..."
Next
' Buttonコントロールのキャプションが
' 表示されるように行の高さを設定
flex.Rows.DefaultSize = 20
' 3列目に通常時の背景画像を設定
flex.Cols(3).StyleNew.BackgroundImage = Image.FromFile("..\..\btn_normal.jpg")
flex.Cols(3).Style.BackgroundImageLayout = ImageAlignEnum.Stretch
flex.Cols(3).Style.TextAlign = TextAlignEnum.CenterCenter
' 3列目は、カスタムエディタに
' Buttonコントロールを設定
Dim btn1 As Button = New Button()
AddHandler btn1.Click, AddressOf btn1_Click
btn1.BackColor = SystemColors.Control
btn1.TextAlign = ContentAlignment.MiddleCenter
flex.Cols(3).Editor = btn1
End Sub
Private Sub flex_MouseEnterCell(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.RowColEventArgs) Handles flex.MouseEnterCell
' 3列目のデータ行の場合、マウスポインタが
' セル上に置かれたら、セルを編集状態にし、
' カスタムエディタのボタンを表示
If e.Col = 3 And e.Row >= 1 Then
flex.StartEditing(e.Row, e.Col)
End If
End Sub
Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
' Buttonコントロールがクリックされた時に
' メッセージを表示
MessageBox.Show("ボタンが押されました")
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
// ボタンのキャプションとなるデータを
// セルデータとして設定
int i;
for (i = 1; i <= flex.Rows.Count - 1; i++)
{
flex[i, 3] = "...";
}
// Buttonコントロールのキャプションが
// 表示されるように行の高さを設定
flex.Rows.DefaultSize = 20;
// 3列目に通常時の背景画像を設定
flex.Cols[3].StyleNew.BackgroundImage = Image.FromFile(@@"..\..\btn_normal.jpg");
flex.Cols[3].Style.BackgroundImageLayout = ImageAlignEnum.Stretch;
flex.Cols[3].Style.TextAlign = TextAlignEnum.CenterCenter;
// 3列目は、カスタムエディタに
// Buttonコントロールを設定
Button btn1 = new Button();
btn1.Click += new System.EventHandler(btn1_Click);
btn1.BackColor = SystemColors.Control;
btn1.TextAlign = ContentAlignment.MiddleCenter;
flex.Cols[3].Editor = btn1;
}
private void flex_MouseEnterCell(object sender, RowColEventArgs e)
{
// 3列目のデータ行の場合、マウスポインタが
// セル上に置かれたら、セルを編集状態にし、
// カスタムエディタのボタンを表示
if ((e.Col == 3) && (e.Row >= 1))
{
flex.StartEditing(e.Row, e.Col);
}
}
private void btn1_Click(object sender , System.EventArgs e)
{
// Buttonコントロールがクリックされた時に
// メッセージを表示
MessageBox.Show("ボタンが押されました");
}
{
// ボタンのキャプションとなるデータを
// セルデータとして設定
int i;
for (i = 1; i <= flex.Rows.Count - 1; i++)
{
flex[i, 3] = "...";
}
// Buttonコントロールのキャプションが
// 表示されるように行の高さを設定
flex.Rows.DefaultSize = 20;
// 3列目に通常時の背景画像を設定
flex.Cols[3].StyleNew.BackgroundImage = Image.FromFile(@@"..\..\btn_normal.jpg");
flex.Cols[3].Style.BackgroundImageLayout = ImageAlignEnum.Stretch;
flex.Cols[3].Style.TextAlign = TextAlignEnum.CenterCenter;
// 3列目は、カスタムエディタに
// Buttonコントロールを設定
Button btn1 = new Button();
btn1.Click += new System.EventHandler(btn1_Click);
btn1.BackColor = SystemColors.Control;
btn1.TextAlign = ContentAlignment.MiddleCenter;
flex.Cols[3].Editor = btn1;
}
private void flex_MouseEnterCell(object sender, RowColEventArgs e)
{
// 3列目のデータ行の場合、マウスポインタが
// セル上に置かれたら、セルを編集状態にし、
// カスタムエディタのボタンを表示
if ((e.Col == 3) && (e.Row >= 1))
{
flex.StartEditing(e.Row, e.Col);
}
}
private void btn1_Click(object sender , System.EventArgs e)
{
// Buttonコントロールがクリックされた時に
// メッセージを表示
MessageBox.Show("ボタンが押されました");
}
旧文書番号
70003