C# ReoGrid クリックしたボタンの座標情報が知りたい への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 えんぴー  (社会人)
投稿日時
2024/5/14 14:27:09
こんにちは、お世話になります。
C#でReoGridとSeleniumを利用してChrome操作しようと思っているのですが、
ReoGridの設定が上手くいかないため教えてほしいです。
ソースの一部を抜粋します。
F列とG列にボタンをそれぞれ表示しており、
F列のボタンを押したら同じ行の値を参考に「SubA」を動かし
G列のボタンを押したら同じ行の値を参考に「SubB」を動かしたいと思っています。
ボタン上に「SubA」など表示されるようになったものの、
ここからどうやってSubA、SubBのイベントと紐づけたら良いのかが分かりません。
・クリックした位置の取得方法
(できたらアドレス、行番号、列番号 すべて知りたいです)
自分でも考え、ググッたりしたのですが情報がなく
C#の基本なのかもしれませんが教えてください。
【以下ソースよりさらに考えた個所】
-------------
【参考ソース】
C#でReoGridとSeleniumを利用してChrome操作しようと思っているのですが、
ReoGridの設定が上手くいかないため教えてほしいです。
ソースの一部を抜粋します。
F列とG列にボタンをそれぞれ表示しており、
F列のボタンを押したら同じ行の値を参考に「SubA」を動かし
G列のボタンを押したら同じ行の値を参考に「SubB」を動かしたいと思っています。
ボタン上に「SubA」など表示されるようになったものの、
ここからどうやってSubA、SubBのイベントと紐づけたら良いのかが分かりません。
・クリックした位置の取得方法
(できたらアドレス、行番号、列番号 すべて知りたいです)
自分でも考え、ググッたりしたのですが情報がなく
C#の基本なのかもしれませんが教えてください。
【以下ソースよりさらに考えた個所】
//機器とIPのところにボタン表示
for (int i = 1; i < MaxRow; i++)
{
var SubAButton= new ButtonCell("SubA");
sheet[i, 5] = SubAButton;
SubAButton.Click += (s, ex) => SubA(s,ex);
//Load環境で「e」を使っているため変えろとでたので「ex」にしました
//これが良いことかどうか不明です…。
}
private void SubA(object sender,EventArgs e)
{
//実行している行が知りたい
//senderをローカル?で確認すると、sender→cell→Address でアドレス(F2)とか
//sender→cell→row で行(0始まり)とかを取得できそうなのですが
//どうやって出すのかがわからないです。
var TEST=sender.ToString();//"unvell.ReoGrid.CellTypes.ButtonCell" になった
e.ToString();//nullになった
}
-------------
【参考ソース】
private void Form1_Load(object sender, EventArgs e)
{
var sheet = MainReoGrid.CurrentWorksheet;
int MaxRow = 11;
int MaxColumn =7 ;
sheet.DisableSettings(
// 列の幅の調整を禁止
WorksheetSettings.Edit_AllowAdjustColumnWidth
// 行の高さの調整を禁止
| WorksheetSettings.Edit_AllowAdjustRowHeight
// 行列のヘッダーを非表示
| WorksheetSettings.View_ShowHeaders
// 選択範囲のドラッグによる内容の移動を禁止する
| WorksheetSettings.Edit_DragSelectionToMoveCells);
sheet.Rows = MaxRow;
sheet.Columns = MaxColumn;
MainReoGrid.DisableSettings(
//タブ切り替えの画面を非表示
WorkbookSettings.View_ShowSheetTabControl
|
//横スクロールバー非表示
WorkbookSettings.View_ShowHorScroll
);
sheet.SetColumnsWidth(0, 1, 160);//A
sheet.SetColumnsWidth(1, 1, 130); //B
sheet.SetColumnsWidth(2, 1, 70);//C
sheet.SetColumnsWidth(3, 1, 220);//D
sheet.SetColumnsWidth(4, 1, 220);//E
sheet.SetColumnsWidth(5, 1, 40);//ボタン1
sheet.SetColumnsWidth(6, 1, 40);//ボタン2
sheet.SetRowsHeight(0, MaxRow, 40);//高さ切り替え
MaxScrollHeight = 40*MaxRow;
// データ設定
sheet["A1"] = "A";//0
sheet["B1"] = "B";//1
sheet["C1"] = "C";//2
sheet["D1"] = "D";//3
sheet["E1"] = "E";//4
sheet["F1"] = "buttonF";//5
sheet["G1"] = "ButtonG";//6
sheet.Ranges["A1:G1"].IsReadonly = true;
//機器とIPのところにボタン表示
for (int i = 1; i < MaxRow; i++)
{
sheet[i, 5] = new ButtonCell("SubA");
sheet[i, 6] = new ButtonCell("SubB");
}
}
別でわからないことが出てきたため、再起票して質問させていただきます。
以下のようにするとボタンをクリックした行が取得できました。