c#中,在tabcontrol切换的Eter事件中使用Brush,程序没有报错,为啥不显示?

请求指教,C#中tabControl不同的tabPage页面,能不能公用同dataGridView来显示数据呢
100yingyuy]
请求指教,C#中tabControl不同的tabPage页面,能不能公用同dataGridView来显示数据呢
100yingyuy]
编辑:www.fx114.net
本篇文章主要介绍了"请求指教,C#中tabControl不同的tabPage页面,能不能公用同dataGridView来显示数据呢
100yingyuy]",主要涉及到请求指教,C#中tabControl不同的tabPage页面,能不能公用同dataGridView来显示数据呢
100yingyuy]方面的内容,对于请求指教,C#中tabControl不同的tabPage页面,能不能公用同dataGridView来显示数据呢
100yingyuy]感兴趣的同学可以参考一下。
刚才发的帖子说得不太清楚,再补发一张,麻烦各位帮帮忙
我的程序中C#中tabControl不同的tabPage实现的功能几乎一样,只是过滤的条件不同。我的tabPage1中设置了
两个GridView,一个用来装数据,一个用来模糊查询。
我怎么实现点击tabPage2后实现的代码和tabPage1后,经过一个查询条件的过滤后,实现的功能也一样呢?请看图:
[img=http://my.csdn.net/my/album/detail/1173899][/img]
http://my.csdn.net/my/album/detail/1173898
我想点击西药界面,中药等都能按条件查询出来先拖一个&datagridview&到&tabPage1&里,设置好列大小样式什么的,然后需要显示&tabPage1&时,先把数据绑定到&datagridview&里,再把&datagridview&加到&tabPage1.Controls&里,需要显示&tabPage2&时,也先把数据绑定到&datagridview&里,再把&datagridview&从&tabPage1.Controls&里移除,加到&tabPage2.Controls&里,实现共用那就不要把datagridview放在tab里,即然是共用,那就放出来。
设计一下整体外观即可。呵呵,能不能写举例写些代码实例给我看看呢引用&3&楼&&的回复:呵呵,能不能写举例写些代码实例给我看看呢
楼主:不需要代码,我的意思是说,你即然只是查询的条件不同,那么你就把查询条件不同的几类界面元素用tabcontrol控件中的tabpage来放置,在下方也就是tabcontrol正下方放一个datagridview,这个其不是更好吗?
为什么非要放在tabpage里呢?接&1楼&,注册&tabContro&的&Selected&事件,事件方法如下
private&void&tabControl1_Selected(object&sender,&TabControlEventArgs&e)
&&&&if&(e.TabPage&==&this.tabPage1)
&&&&&&&&//&先绑定&datagridview&要在&tabPage1&里显示数据
&&&&&&&&this.tabPage2.Controls.Remove(this.dataGridView1);
&&&&&&&&this.tabPage1.Controls.Add(this.dataGridView1);
&&&&else&if&(e.TabPage&==&this.tabPage2)
&&&&&&&&//&先绑定&datagridview&要在&tabPage2&里显示数据
&&&&&&&&this.tabPage1.Controls.Remove(this.dataGridView1);
&&&&&&&&this.tabPage2.Controls.Add(this.dataGridView1);
}根据这样绑定的话,但是我要从tabPage2转回tabPage1的话,还能不能看到原来在tabPage1上查询的数据的?引用&6&楼&&的回复:根据这样绑定的话,但是我要从tabPage2转回tabPage1的话,还能不能看到原来在tabPage1上查询的数据的?
看不到的,你可以设置二个全局变量,查询后将值赋给全局变量,绑定时从全局变量取值给&datagridview那就在同一个卡里面同一个控件就好哦何必另外?楼主似乎在做医嘱
把DataGridView做一个用户控件,传一个查询条件进去,用DataTable.Select("过滤条件");
每个TabPage传不同条件就可以了,这样就可以实现楼主的需求了
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:1899人阅读
在窗体Load事件中添加:
this.tabControl1.Region = new Region(new RectangleF(this.tabPage1.Left, this.tabPage1.Top, this.tabPage1.Width, this.tabPage1.Height));
以上代码完成标签的隐藏,但还存在一个问题,就是Tab + Ctrl 可以切换TabControl中的页,可以通过捕捉按键消息屏蔽 组合键:
&&&&&&& protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
&&&&&&&&&&& switch (keyData)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& case (Keys.Tab | Keys.Control):
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& default:
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& return base.ProcessCmdKey(ref msg, keyData);
这个依旧存在BUG,用Tab键,把焦点能放在选项卡上,然后用左右键控制。
如果加上屏蔽TAB键,和左右键,都可能导致一些用户操作上的BUG。
隐藏TabControl的标签必须通过继承TabControl并自行重画来实现。下面是一个重画TabControl的完整的例子:
public&class&FTabControl&:&System.Windows.Forms.TabControl{
private&ponentModel.Container&components&=&
private&static&Color&BackColor=Color.FromArgb(227,237,251);
private&static&Color&ButtonC
private&static&Color&ButtonHighlightC
private&static&Color&BorderColor=Color.B
public&bool&UserChangeTab=
public&FTabControl(){
InitializeComponent();
SetDafaultStyle();
SetStyle(ControlStyles.UserPaint,true);
#region&Component&Designer&generated&code
private&void&InitializeComponent(){
components&=&new&ponentModel.Container();
#endregion
public&void&SetDafaultStyle(){
Appearance&=&System.Windows.Forms.TabAppearance.FlatB
ButtonColor&=&Color.FromArgb(184,210,250);
ButtonHighlightColor&=&Color.FromArgb(144,187,252);
protected&override&void&OnPaint(PaintEventArgs&e){
e.Graphics.FillRectangle(new&SolidBrush(BackColor),e.ClipRectangle);
for&(int&i=0;i&this.TabCi++){
DrawItem(e.Graphics,i);
protected&void&DrawItem(Graphics&g,int&index){
Rectangle&r&=&GetTabRect(index);
r.Inflate(-2,-2);
if&(SelectedIndex==index)
g.FillRectangle(new&SolidBrush(ButtonHighlightColor),r);
g.FillRectangle(new&SolidBrush(ButtonColor),r);
g.DrawRectangle(new&Pen(new&SolidBrush(BorderColor)),r);
r.Inflate(-3,-3);
g.DrawString(TabPages[index].Text,Font,new&SolidBrush(BorderColor),r);
protected&override&void&WndProc(ref&System.Windows.Forms.Message&m){
if&(m.Msg&==&513&&&&!this.UserChangeTab&){
&//trap&WM_LBUTTONDOWN
base.WndProc(ref&m);
protected&override&void&OnKeyDown(KeyEventArgs&e){
if(e.Control==true&&&&e.KeyCode==System.Windows.Forms.Keys.Tab&&&&!this.UserChangeTab){
&//trap&CTRL+TAB&and&CTRL+SHIFT+TAB
base.OnKeyDown(e);
以下是对上面的例子代码的一点说明:
1)&public&bool&UserChangeTab成员的作用是规定是否允许用户在界面上通过鼠标点击标签和按&Ctrl+Tab&来改变当前标签页。
2)&在构造函数中调用SetStyle()的目的是告诉系统这个控件将自行重画,而不是用系统默认的显示方式。
3)&OnPaint()完成的就是自行重画的工作,其中调用了DrawItem函数来重画所有的标签。
4)&SetDafaultStyle()的功能是设定一些默认的颜色和界面风格。
5)&最重要的就是重载WndProc()和OnKeyDown()函数。在这两个重载函数中捕获了鼠标点击事件以及键盘输入事件。一旦this.UserChangeTab的值为false(即不允许用户来改变标签页),则将捕获的事件销毁,不再传递给基类的事件处理函数。
使用这个FTabControl时,
1)&如果需要禁止用户通过鼠标或者Ctrl+Tab改变标签页,需要设定UserChangeTab为false。
2)&如果需要隐藏标签,需要将FTabControl的ItemSize属性设为(1,1),并适当调整颜色设置以达到视觉上看不出的效果。
需要说明的是,通过上面这个例子,不但可以实现隐藏Tab标签、禁止用户改变标签等功能,通过扩充DrawItem函数还可以实现Tab标签的各种复杂视觉效果。
Hogwarts&-&S(u)ddenly&dis@ppeared...
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(/directory/worldwide/zh-cn/community/terms_chs.asp)。&&
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(/directory/worldwide/zh-cn/community/survey.asp?key=(S,))。&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34720次
排名:千里之外
转载:53篇
(1)(1)(2)(3)(1)(1)(1)(1)(1)(1)(1)(2)(1)(1)(1)(1)(2)(1)(2)(1)(10)(10)(9)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'4228人阅读
/csharp/tabcontrol_tabpage_event_trigger.html
一般我们会想,这个事件可能在tabpage中已经被预定义了,但是找遍了tabpage事件,仍然没有合适的。
实际上,这个事件不是在tabpage中,而是在tabcontrol中。而且我们还需要自己稍微写一行代码判断一下。
这个事件就是:tabcontrol控件的SelectedIndexChanged事件。
当tabcontrol控件的任何一个tabpage被点击或选择,即发生SelectedIndexChanged事件事件。
事件处理函数中,我们稍微判断一下,源代码如下:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
if (tabControl1.SelectedTab.Name == &tabPage2&)
.......执行操作...............
在上面的实例中,当我们点击tabpage2选项卡时,将触发SelectedIndexChanged,并通过if判断,从而执行我们想要的一系列操作。
有多个tabpage,我们就多写几个if判断。也蛮简单的,不比每个tabpage有单独的触发事件设置复杂。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:198057次
积分:3084
积分:3084
排名:第11790名
原创:92篇
转载:163篇
(3)(1)(3)(8)(4)(15)(13)(22)(25)(5)(8)(4)(1)(3)(2)(1)(1)(1)(7)(2)(9)(9)(3)(1)(3)(1)(3)(8)(4)(5)(5)(5)(4)(2)(10)(8)(3)(1)(1)(3)(5)(4)(6)(10)(10)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'C#利用tabControl控件实现多窗体嵌入及关闭
创建一个主窗体(Formmain)、两个副窗体(Form1,Form2);在主窗体中分别添加一个menuStrip控件、tabControl控件,并在menu控件上添加一个主菜单和两个子菜单,如下图:
继而,选中tabControl控件属性修改 DrawMode = OwnerDrawFixed,再根据如下代码添加即可:
public void Add_TabPage(string str, Form myForm) &
& & & &{ &
& & & & & &if (tabControlCheckHave(this.MainTabControl, str)) &&
& & & & & &{ &&
& & & & & & & & &&
& & & & & &} &
& & & & & &else &
& & & & & &{ &
& & & & & & & &MainTabControl.TabPages.Add(str); &
& & & & & & & &MainTabControl.SelectTab(MainTabControl.TabPages.Count - 1); &
& & & & & & & & &
& & & & & & & &myForm.FormBorderStyle = FormBorderStyle.N &
& & & & & & & &myForm.Dock = DockStyle.F &
& & & & & & & &myForm.TopLevel = &
& & & & & & & &myForm.Show(); &
& & & & & & & &myForm.Parent = MainTabControl.SelectedT &
& & & & & &} &
& & & &} &
& & & &public bool tabControlCheckHave(System.Windows.Forms.TabControl tab, String tabName) &
& & & &{ &
& & & & & &for (int i = 0; i & tab.TabC i++) &
& & & & & &{ &
& & & & & & & &if (tab.TabPages[i].Text == tabName) &
& & & & & & & &{ &
& & & & & & & & & &tab.SelectedIndex = &
& & & & & & & & & & &
& & & & & & & &} &
& & & & & &} &
& & & & & & &
& & & &} &&
& & & &private void form1ToolStripMenuItem_Click(object sender, EventArgs e) &
& & & &{ &
& & & & & &Form1 f1= new Form1(); &
& & & & & &Add_TabPage(&f1中华人民共和国窗体 &&, f1); &
& & & &} &
& & & &private void form2ToolStripMenuItem_Click(object sender, EventArgs e) &
& & & &{ &
& & & & & &Form2 f2 = new Form2(); &
& & & & & &Add_TabPage(&f2朝鲜窗体 &&, f2); &
& & & &} &
& & & &private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e) &
& & & &{ &
& & & & & &/*如果将 DrawMode 属性设置为 OwnerDrawFixed,&
& & & & & &则每当 TabControl 需要绘制它的一个选项卡时,它就会引发 DrawItem 事件*/ &
& & & & & &try &
& & & & & &{ &
& & & & & & & &this.MainTabControl.TabPages[e.Index].BackColor = Color.LightB &
& & & & & & & &Rectangle tabRect = this.MainTabControl.GetTabRect(e.Index); &
& & & & & & & &e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, (float)(tabRect.X + 2), (float)(tabRect.Y + 2)); &
& & & & & & & &using (Pen pen = new Pen(Color.White)) &
& & & & & & & &{ &
& & & & & & & & & &tabRect.Offset(tabRect.Width - 15, 2); &
& & & & & & & & & &tabRect.Width = 15; &
& & & & & & & & & &tabRect.Height = 15; &
& & & & & & & & & &e.Graphics.DrawRectangle(pen, tabRect); &
& & & & & & & &} &
& & & & & & & &Color color = (e.State == DrawItemState.Selected) ? Color.LightBlue : Color.W &
& & & & & & & &using (Brush brush = new SolidBrush(color)) &
& & & & & & & &{ &
& & & & & & & & & &e.Graphics.FillRectangle(brush, tabRect); &
& & & & & & & &} &
& & & & & & & &using (Pen pen2 = new Pen(Color.Red)) &
& & & & & & & &{ &
& & & & & & & & & &Point point = new Point(tabRect.X + 3, tabRect.Y + 3); &
& & & & & & & & & &Point point2 = new Point((tabRect.X + tabRect.Width) - 3, (tabRect.Y + tabRect.Height) - 3); &
& & & & & & & & & &e.Graphics.DrawLine(pen2, point, point2); &
& & & & & & & & & &Point point3 = new Point(tabRect.X + 3, (tabRect.Y + tabRect.Height) - 3); &
& & & & & & & & & &Point point4 = new Point((tabRect.X + tabRect.Width) - 3, tabRect.Y + 3); &
& & & & & & & & & &e.Graphics.DrawLine(pen2, point3, point4); &
& & & & & & & &} &
& & & & & & & &e.Graphics.Dispose(); &
& & & & & &} &
& & & & & &catch (Exception ex) &
& & & & & &{ &
& & & & & & & &MessageBox.Show(ex.Message); &
& & & & & &} &
& & & &} &
& & & &private void MainTabControl_MouseDown(object sender, MouseEventArgs e) &
& & & &{ &
& & & & & &if (e.Button == MouseButtons.Left) &
& & & & & &{ &
& & & & & & & &int x = e.X; &
& & & & & & & &int y = e.Y; &
& & & & & & & &Rectangle tabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex); &
& & & & & & & &tabRect.Offset(tabRect.Width - 0x12, 2); &
& & & & & & & &tabRect.Width = 15; &
& & & & & & & &tabRect.Height = 15; &
& & & & & & & &if ((((x & tabRect.X) && (x & tabRect.Right)) && (y & tabRect.Y)) && (y & tabRect.Bottom)) &
& & & & & & & &{ &
& & & & & & & & & &this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab); &
& & & & & & & &} &
& & & & & &} &
& & & &} &}

我要回帖

更多关于 tabcontrol切换 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信