+ -
当前位置:首页 → 问答吧 → VB.net控件數組中屬性的設置

VB.net控件數組中屬性的設置

时间:2011-12-08

来源:互联网

在窗體中建了5個RadioButton控件,分別是RadioButton1,RadioButto2,RadioButto3,RadioButto4,RadioButto5放在Panel1容器中,還有5個TextBox控件,分別是TextBox1,TextBox2,TextBox3,TextBox4,TextBox5放在Panel2容器中。現在我要實現的功能是:用控件數組實現,當RadioButton控件被選中時,對應的TextBox控件獲得焦點。
我的想法應該是這樣實現:
  Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged, RadioButton2.CheckedChanged, RadioButton3.CheckedChanged, RadioButton4.CheckedChanged, RadioButton5.CheckedChanged
  Dim i%
  For i = 0 To 4
  If Panel1.Controls.Item(i).Checked = True Then
  Panel2.Controls.Item(i).Focus()
  End If
  Next
  End Sub
但現在的問題是這個Panel1.Controls.Item(i)沒有Checked的屬性,不知道該怎麽解決這個問題,希望各位大能幫忙解決一下。
還要說明一點的是,我只想用控件數組來實現,我知道一個控件一個控件去寫代碼也可以實現,但那有點蔴煩,最主要的是我想掌握這個知識點,或者是多了解一些這方面的知識。
小弟剛開始學VB.net,希望大家能夠多多指教,謝謝!

作者: wwq12311962   发布时间: 2011-12-08

该回复于2011-12-08 11:24:01被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#2楼 得分:0回复于:2011-12-08 12:29:05
Private Sub RadioButton1_CheckedChanged(ByVal s As Object, ByVal e As EventArgs) Handles RadioButton1.Click,
  RadioButton2.Click, RadioButton3.Click, RadioButton4.Click, RadioButton5.Click

  For i% = 0 To Panel1.Controls.Count - 1
  If s.Equals(Panel1.Controls.Item(i)) Then Panel2.Controls.Item(i).Focus():exit sub
  Next

  End Sub


其实你只要判断事件传入的object是哪个就可以了

如果你要判断checked值
你可以这样:
Dim rb as RadioButton=Panel1.Controls.Item(i)
然后:
if rb.checked=true then

作者: limin_hy   发布时间: 2011-12-08

To: btxdlibin
謝謝! 
你的方法確實可以,我也想到了一個方法:
 Dim i%
 If sender.checked = True Then
  i = sender.tag
  Panel2.Controls.Item(i).Focus()
 End If
但這需要設置tag這個屬性與控件TextBox的index屬性一致才行。
另外,爲什麽這個sender的後面只顯示Equals,GetHashCode,GetType,ReferenceEquals,ToString這幾個屬性呢,其它屬性爲什麽不顯示?

作者: btxdlibin   发布时间: 2011-12-08

sender 利用它就可以

作者: wwq12311962   发布时间: 2011-12-08

CType(sender, RadioButton).ID

字符串截取一下,取出数字部分即可

然后 FindControl("TextBox"+之前截取的数字)

设置焦点即可

作者: Sandy945   发布时间: 2011-12-08

To: Sandy945
謝謝! 你的方法應該可行,但稍顯蔴煩,我們還是討論一下sender和e後的屬性的問題吧

作者: Sandy945   发布时间: 2011-12-08

什么?

作者: wwq12311962   发布时间: 2011-12-08

爲什麽這個sender的後面只顯示Equals,GetHashCode,GetType,ReferenceEquals,ToString這幾個屬性呢,其它屬性爲什麽不顯示卻可以用?

作者: Sandy945   发布时间: 2011-12-08

因为参数的类型是Object

你需要进行类型转换

作者: wwq12311962   发布时间: 2011-12-08

sender是object类型,这在你事件参数定义时确定的.
object对象是个弱类型,它的属性很少,所以它可以接收各种类型的参数.
你在写代码的时候是不能确定他的具体对象类型.
只有在运行时接收到参数才后期绑定参数类型.


因为在这里你要传入的对象是RadioButton,你可以前期绑定类型.
所以sender参数你也可以这样定义:ByVal sender As RadioButton.

确认类型后你才可以使用属性.


作者: Sandy945   发布时间: 2011-12-08

現在還有一個問題:窗體之間無法傳值
比如现在有两个窗体form1和form2,在form1中有一个Label1控件和一个button1控件,在form2中有一个button1按钮控件,两个窗体中的代码如下:
form1中的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Form2.Show()
  End Sub
form2中的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  form1.Label1.Text = "AAA"
  End Sub
现在的问题是,当单击form2中的Button1控件时,form1中的Label1控件没有任何反应,不知道这是什麽原因,我新建一个工程的话,就没有这个问题,只有在原来的工程中才有这个问题,我现在只有这种方法可以传值:
在公共模块中定义一个全局变量:
Public TempData as String

form1中的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Form2.ShowDialog()
  Label1.Text=TempData
  End Sub
form2中的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  TempData="AAA"
  Me.Close
  End Sub
不知道大家遇到过这个问题没有,大家帮帮忙看看什麽原因啊?

作者: btxdlibin   发布时间: 2011-12-08

你确认下form1的名称是不是这个

作者: wwq12311962   发布时间: 2011-12-08

利用Onwer 属性

作者: btxdlibin   发布时间: 2011-12-08

http://topic.csdn.net/u/20100429/19/333cb417-e07d-44b6-9c0f-ab7ada0ac170.html

作者: Sandy945   发布时间: 2011-12-08