2013-10-26 8 views
0

지금은 값을 다른 폼으로 보내고 레이블에 결과를 표시하는 단추가 있습니다. 문제는 코드화해야하는 w 개의 레이블이있는 20 개의 버튼이 있고 여러 개의 버튼에서 값을 전달할 수있는 방법이 무엇인지 잘 모르겠습니다. 전달되는 양식의 사례 진술일까요? 나는 VB.Net에 대한 새로운 사용자이고 내 길을 찾고 있으므로 도움을 주시면 감사하겠습니다. 첫 번째 버튼 'A'에 대한 코드 샘플을 포함 시켰습니다. 감사합니다vb2010 여러 단추에서 이름 값 가져 오기

frmMain 수

Private Sub btnA_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnA.MouseDown 
     If (e.Button = MouseButtons.Right) Then 
      'Dim curButton As Button = DirectCast(sender, Button) 
      'frmRacks.buttonName = curButton.Name 'Dynamic alternative to frmRacks.buttonName = "A" 
      frmRacks.buttonName = "A" 
      frmRacks.Show() 
     ElseIf (e.Button = MouseButtons.Left) Then 
      MessageBox.Show("To be coded") 
     End If 
    End Sub 

frmRacks

Public Class frmRacks 
    Public buttonName As String 
    Private Sub racksfrm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     lblRacks.Text = buttonName 

    End Sub 

편집 : 당신이 잘하면 당신이 명확하게 아이디어를 얻을하는 데 도움이 될 것입니다 샘플 코드가 여기에

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim button1 As Button = New Button 
     Dim button2 As Button = New Button 
     Dim button3 As Button = New Button 

     With button1 
      .Name = "button1" 
      .Left = 0 
      AddHandler .MouseDown, AddressOf btn_MouseDown 
      'Add remaining properties for button1 
     End With 

     With button2 
      .Name = "button2" 
      .Left = 100 
      AddHandler .MouseDown, AddressOf btn_MouseDown 
      'Add remaining properties for button2 
     End With 

     With button3 
      .Name = "button3" 
      .Left = 200 
      AddHandler .MouseDown, AddressOf btn_MouseDown 
      'Add remaining properties for button3 
     End With 

     Me.Controls.Add(button1) 
     Me.Controls.Add(button2) 
     Me.Controls.Add(button3) 

    End Sub 

    Private Sub btn_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) 

     Dim curButton As Button = DirectCast(sender, Button) 
     Dim curButtonName As String = curButton.Name 'This string would change on account of the button you have clicked 
     Form2.buttonName = curButtonName 
     Form2.Show() 
     'MessageBox.Show("You clicked the button called " & curButtonName.ToUpper) 
    End Sub 
End Class 

Public Class Form2 
    Public buttonName As String 
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

     lblRacks.Text = buttonName 
    End Sub 
End Class 
+0

당신은이 질문을하기 전에 물어 보았습니다. 거기에 적어도 하나의 대답이 있음을 당신이 원하는대로 수행 할 수있게 해주는 코드를 제공합니다. 아마도 오해가 있습니다 (당신이 정확히 무엇을 원하는지 이해하지 못하거나 답을 정확히 이해하지 못했을 것입니다). 이 모든 것을 명확히하려고 노력하겠습니다. btnA_MouseDown은 무엇입니까? 모든 버튼과 연관된 click 이벤트 메소드? – varocarbas

+0

@varocarbas 어디에서 여러 개의 버튼에 관한 질문을했을까요? 순간 버튼 'A'에서만 버튼으로 연결된 클릭 이벤트입니다. 감사합니다 – user1532468

+0

아마도 이것은 오해입니다. 마지막 질문/대답은 버튼 하나와 1000 개의 버튼에 대해 작동합니다. 원하는만큼 버튼에 btnA_MouseDown을 연결하고 해당 이름을 검색 할 수 있습니다. (왜 지금 frmRacks.buttonName = "A"라고 하드 코딩하는지 모르겠 음) – varocarbas

답변

1

새로운 프로젝트 :

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

    Dim button1 As Button = New Button 
    Dim button2 As Button = New Button 
    Dim button3 As Button = New Button 

    With button1 
     .Name = "button1" 
     .Left = 0 
     AddHandler .MouseDown, AddressOf btn_MouseDown 
     'Add remaining properties for button1 
    End With 

    With button2 
     .Name = "button2" 
     .Left = 100 
     AddHandler .MouseDown, AddressOf btn_MouseDown 
     'Add remaining properties for button2 
    End With 

    With button3 
     .Name = "button3" 
     .Left = 200 
     AddHandler .MouseDown, AddressOf btn_MouseDown 
     'Add remaining properties for button3 
    End With 

    Me.Controls.Add(button1) 
    Me.Controls.Add(button2) 
    Me.Controls.Add(button3) 

End Sub 

Private Sub btn_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) 

    Dim curButton As Button = DirectCast(sender, Button) 

    Dim curButtonName As String = curButton.Name 'This string would change on account of the button you have clicked 

    MessageBox.Show("You clicked the button called " & curButtonName.ToUpper) 
End Sub 
+0

고마워요. 그러나 나는 한 가지 질문이있다. 귀하의 form1_load가 내 frmMain이고 Mousedown 하위가 내 frm \ racks가 이벤트를 캡처한다는 코드를 읽은 후 생각이 바른가요? 감사합니다 – user1532468

+0

@ user1532468이 코드는 이해해야하는 일반적인 접근 방법을 제공합니다. 기본 폼에 버튼을 추가합니다 (예를 들어 어떤 폼이나 폼으로 바꿀 수 있습니다). 버튼을 정의하는 동안 해당 이벤트를 연결합니다 (이 경우 MouseDown이지만 다른 이벤트와 동일하게 수행 할 수 있음). 단추와 같은 메소드를 많이 작성하는 대신, 모든 메소드에 동일한 메소드를 사용하고 현재 단추 인 송신자 인수를 활용합니다 (원하는 .Name 특성을 검색합니다). 이 모든 아이디어가 당신에게 명확합니까? – varocarbas

+0

Nope. 나는 내 질문에 내가 새로운 사용자이고 2 주간의 독서와 튜토리얼을 마친 후 실제로 코딩을 시작했다고 말했다. 고마워 – user1532468