怎么该变TabControl1各个选项卡标签的背景颜色?没有有人了解的,高手请进!

renchen 2003-09-12 07:29:56
rt!

我想动态的改变选项卡上的标题,
如果用的DrawItem来实现时,就没办法来动态该变其值了,!
高手有没有办法。

最好能给点程序,谢谢!
...全文
557 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
renchen 2003-09-15
  • 打赏
  • 举报
回复
ok!

完成了!上贴可行。

真的特别感谢 eileendl(默默)
谢谢!
eileendl 2003-09-15
  • 打赏
  • 举报
回复
天哪,你怎么能这么做?
做好人做到底了,看看下面吧,要是再不行,我就没招儿了。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
For i = 0 To 3
Dim Datagridd As New DataGrid()
Datagridd.Left = i * 80

Me.Controls.Add(Datagridd)

AddHandler Datagridd.MouseUp, AddressOf DataGridd_MouseUp
'初始化3个datagrid....
Next i
End Sub

WithEvents obj As New DataGrid()

Private Sub DataGridd_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles obj.MouseUp
If obj.CurrentRowIndex <> -1 Then
obj.Select(obj.CurrentRowIndex)
End If
End Sub
renchen 2003-09-14
  • 打赏
  • 举报
回复
呵呵,不好意思,我的表达能力太差。

我是说用程序动态产生一个datagrid 控件(不是使用拖放方法)
然后怎么对产生的datagrid1进行事件处理,

Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'动态产生datarid1
dim datagrd1 as new datagrid
'增加事件处理响应
AddHandler datagridd.MouseUp, AddressOf DataGridd_MouseUp
end sub

Private Sub DataGridd_MouseUp(ByVal sender As Object, ByVal e As _& System.Windows.Forms.MouseEventArgs)
'怎么引用刚才定义的datagridd 呢

datagridd.select(DataGridd.currentindex)'这不行,可是我想实现点击后实现选中行
----------------------------------------
end sub

'划线部分是问题所在
renchen 2003-09-14
  • 打赏
  • 举报
回复
如果是用的同一个事件处理程序,可又怎么以来区分是那一个控件传过来的呢?

我是用
For i = 0 To tempcount - 1
Dim Datagridd As New DataGrid

tpage.Controls.Add(Datagridd)

AddHandler Datagridd.MouseUp, AddressOf DataGridd_MouseUp
next i

Private Sub DataGridd_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) ' Handles DataGrid1.MouseUp

datagridd.select(DataGridd.currentindex)'这步总是过不去,
'这里我还是搞不定到底是那个控件引发的事件,我想得到这个印发事控件的名称,
以便下对其操作?????问题所在这!

End Sub
eileendl 2003-09-14
  • 打赏
  • 举报
回复
看不太懂你说的是什么。
你到底想达到什么样的目的吧?
点某个tabpage中的datagrid中某一列进行**处理??
eileendl 2003-09-14
  • 打赏
  • 举报
回复
不用阿,只有一个withevents 然后所有的datagrid都
AddHandler lb.Click, AddressOf obj_Click 就可以了
renchen 2003-09-14
  • 打赏
  • 举报
回复
>> eileendl(默默)

可以,不过怎么来对用程序实现加入的
tabcontrol1.tapage1中的datagrid 事件作处理呢?

也就是说用
tabControl1.Controls.Add(tabPage2)
tabcontrol1.tabpage2.controls.add(datagrid1)
作事件处理呢?

比如:datagrid1的mouse_up 事件来处理datagrid1中的某一列选中.
这条语句在mouse_up事件中并没有被实例话不能用
datagrid1.select(DataGridd.currentindex)
有没有办法解决这个问题?

谢谢大家的回贴!

renchen 2003-09-14
  • 打赏
  • 举报
回复
上面的办发是可以,不过又有新问题了,哈哈。

我本来是用for 循环来定义并程序动态产的datagrid 和tabpage这两个控件,
例如:一个tabpage 中有一个datagrid 控件,(不想共用一个datagrid)

可是如果按你给的程序来写,
WithEvents obj As New Control()是不能用for 来循环定义的,也就没有办法把各个
控件都也上事件处理程序.

所以还是不能解决整个问题。

谢谢你的回复!
eileendl 2003-09-14
  • 打赏
  • 举报
回复
看看我做的吧:
Dim lb As New MyButton()
AddHandler lb.Click, AddressOf obj_Click

WithEvents obj As New Control()
Private Sub obj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles obj.Click
'处理代码
End Sub
这样就可以了。
eileendl 2003-09-14
  • 打赏
  • 举报
回复
这又是另一个问题了,不是关于tabpage的了?
dxq 2003-09-13
  • 打赏
  • 举报
回复
TabControl_DrawItem事件中:

TabControl.TabPages(e.Index).Text="动态值"
e.Grphics.DrawString(TabControl.TabPages(e.Index).Text, _
TabControl.Font,TabControl.ForeColor, _
e.Bounds.X,e.Bounds.Y+1)

这样行不?
renchen 2003-09-13
  • 打赏
  • 举报
回复
up
eileendl 2003-09-13
  • 打赏
  • 举报
回复
看看这个:
Imports System.Drawing
Imports System.Windows.Forms

Public Class Form1
Inherits Form
Private tabArea As Rectangle
Private tabTextArea As RectangleF

Public Sub New()
Dim tabControl1 As New TabControl()
Dim tabPage1 As New TabPage()

' Allows access to the DrawItem event.
tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed

tabControl1.SizeMode = TabSizeMode.Fixed
tabControl1.Controls.Add(tabPage1)
tabControl1.ItemSize = New Size(80, 30)
tabControl1.Location = New Point(25, 25)
tabControl1.Size = New Size(250, 250)
tabPage1.TabIndex = 0
ClientSize = New Size(300, 300)
Controls.Add(tabControl1)

tabArea = tabControl1.GetTabRect(0)
tabTextArea = RectangleF.op_Implicit(tabControl1.GetTabRect(0))

' Binds the event handler DrawOnTab to the DrawItem event
' through the DrawItemEventHandler delegate.
AddHandler tabControl1.DrawItem, AddressOf DrawOnTab
End Sub

' Declares the event handler DrawOnTab which is a method that
' draws a string and Rectangle on the tabPage1 tab.
Private Sub DrawOnTab(ByVal sender As Object, ByVal e As DrawItemEventArgs)
Dim g As Graphics = e.Graphics
Dim p As New Pen(Color.Blue)
Dim font As New Font("Arial", 10.0F)
Dim brush As New SolidBrush(Color.Red)

g.DrawRectangle(p, tabArea)
g.DrawString("tabPage1", font, brush, tabTextArea)
End Sub

Shared Sub Main()
Application.Run(New Form1())
End Sub
End Class
renchen 2003-09-12
  • 打赏
  • 举报
回复
可能是我表达的太不请楚,

我是说用什么方法来改变标签的颜色,而不是用 TAB.TabPages(0).BackColor = Color.Blue
来改变整体的背影色。

解释:标签也就是TabControl1控件的TabPages的最上方能被鼠标选中从而进行TabPages切换的部分.
其实我也知道一点的具体解决方法,就是用DrawItem类来实现画图功能从而改变标签的颜色,
可以这个方法有一定的弊端,就是如果使用画图则Drawmode属性要设为OwnerDrawFixed,也就是说要设为由系统来绘制标题,所以这样太不方便。

希望高手出招。
eileendl 2003-09-12
  • 打赏
  • 举报
回复
不是太清楚你说的什么,不知道我理解的对不
改变标题: TAB.TabPages(0).Text = "hello"
改变标签颜色: TAB.TabPages(0).BackColor = Color.Blue

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧