900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C#.Net工作笔记018---葡萄城控件FlexGrid自定义单元格_以及给自定义控件添加自定义事件

C#.Net工作笔记018---葡萄城控件FlexGrid自定义单元格_以及给自定义控件添加自定义事件

时间:2020-12-09 08:24:36

相关推荐

C#.Net工作笔记018---葡萄城控件FlexGrid自定义单元格_以及给自定义控件添加自定义事件

技术交流QQ群【JAVA,C,.NET,BigData,AI】:170933152

工作需要,给flexgrid添加自定义类型的单元格,这里自定义了一个radiobutton.

下面这个案例可

以在flexgrid安装后,的samples文件夹中找到,下面是c#的案例.

using C1.Win.C1FlexGrid;using System;using System.Collections.Generic;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Shopch.Sc.Sp.Player.ShowPlan.SubForm{public class HostedControl{internal C1FlexGrid _flex;internal Control _ctl;internal Row _row;internal Column _col;internal Panel _pnl;internal RadioButton RbtControl;public delegate void InformHandle(HostedControl sender); //这个部分是自己添加的,自定义事件,给HostedControl//这个类添加了一个自定义事件public event InformHandle RbtClick;//添加了一个自定义事件internal HostedControl(C1FlexGrid flex, RadioButton hosted, int row, int col){_flex = flex;_ctl = hosted;_row = flex.Rows[row];_col = flex.Cols[col];RbtControl = hosted;_pnl = new Panel();_pnl.Controls.Add(_ctl);hosted.Click += new EventHandler(_rbt_Click);//设置当,自定义的控件这里是radiobutton被//イベントの実行を追加//flex.AfterEdit += new RowColEventHandler(_rbt_Click);// ホストされたコントロールをグリッドに追加します。_flex.Controls.Add(_pnl);}public virtual void OnClick(){if (RbtClick != null){RbtClick(this);}}// 通常のスクロールエリアと異なって見せるようにします。(編集時)private void _rbt_Click(object sender,EventArgs e){OnClick();}public bool UpdatePosition(){// 行および列のインデックスを取得します。int r = _row.Index;int c = _col.Index;if (r < 0 || c < 0) return false;// セルの位置を取得します。Rectangle rc = _flex.GetCellRect(r, c, false);// セルに収まらない場合コントロールを非表示します。if (rc.Width <= 0 || rc.Height <= 0 || !rc.IntersectsWith(_flex.ClientRectangle)){_pnl.Visible = false;return true;}// コントロールを表示します。_pnl.Bounds = rc;_pnl.BackColor = Color.Transparent;_ctl.Location = new Point((_pnl.Width - _ctl.Width) / 2, (_pnl.Height - _ctl.Height) / 2);_pnl.Visible = true;return true;}}}

利用上面的这个类,来给flexgrid添加自定义控件:

我这里添加radiobutton

首先在form类中,添加:全局变量

List<HostedControl> hostedControlList = new List<HostedControl>();

private int RbtTagIndex;

RbtTagIndex 添加这个一个全局变量,在load中,设置为0,用来记录,添加到flexgrid中的自定义控件

在进行给单元格赋值的时候:

进行下面的操作:

首先清除原有控件

hostedControlList.Clear();

C1flegridTest.Controls.Clear();

RbtTagIndex = RbtTagIndex + 1;

var radioBtn = new RadioButton();

radioBtn = new RadioButton();

radioBtn.BackColor = Color.Transparent;

radioBtn.Text = "";

radioBtn.AutoSize = true;

radioBtn.Checked = true;

radioBtn.Tag = Convert.ToString(RbtTagIndex) + "-1";

HostedControl hostedControlTmp = new HostedControl(C1flexgridTest, radioBtn, i, C1fShowDetail.Cols["TestRbt1"].Index);//把自定义控件添加到某一行,某一列上

hostedControlTmp.RbtClick += new HostedControl.InformHandle(RbtClickEvent);//给这个自定义控件添加上自定义的事件

hostedControlList.Add(hostedControlTmp);

然后添加一个事件 来更新,自定义控件的位置:

private void C1fShowDetail_Paint(object sender, PaintEventArgs e)

{

foreach (HostedControl hosted in hostedControlList)

hosted.UpdatePosition();

}

//下面当点击单元格中的自定义控件的时候,就会自动触发,下面的事件,这样就可以在这个事件中控制,自定义的单元格控件了

private void RbtClickEvent(HostedControl sender) {

HostedControl hostedControlTmp = sender;

String tag = Convert.ToString(hostedControlTmp.RbtControl.Tag);

String tag0 = tag.Split('-')[0];

String tag1 = tag.Split('-')[1];

String tag2 = "";

String tag3 = "";

if (tag1.Equals("1")) {

tag2 = "2";

tag3 = "3";

} else if (tag1.Equals("2")) {

tag2 = "1";

tag3 = "3";

}

else if (tag1.Equals("3"))

{

tag2 = "1";

tag3 = "2";

}

String searchStr1 = "";

String searchStr2 = "";

searchStr1 = tag0 + "-" + tag2;

searchStr2 = tag0 + "-" + tag3;

foreach (HostedControl hosted in hostedControlList) {

if (Convert.ToString(hosted.RbtControl.Tag).Equals(searchStr1)) {

hosted.RbtControl.Checked = false;

}else if (Convert.ToString(hosted.RbtControl.Tag).Equals(searchStr2))

{

hosted.RbtControl.Checked = false;

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。