2013-11-03 12 views
0

我想創建一個函數,自動執行所有操作。這裏是我當前的代碼:用字符串中的表格名稱更改標籤文本。 String1.label1.text

Public Sub IncrementValueBeta(SlideDescription As String, SlideNumber As Integer, FormName As String) 
    ChangeSlide (SlideNumber) 
    MsgBox ("Test: " + SlideDescription) 
    AddClicks = FormName.ClickedTimes.Text + 1 
    FormName.ClickedTimes.Text = AddClicks 
End Sub 

這將添加一個數字的價值,但我試圖使代碼更簡潔,而不必做if FormName = "Slide1" 1000倍,因爲它是一個巨大的問卷調查。

用戶將輸入"FormName",例如"Form1"。在代碼中,它將使用它像FormName.ClickedTimes.Caption = AddClicks所以在幻燈片中,如果幻燈片是25點擊它將是26已經工作,但只有當我做Slide3不是FormName有沒有辦法我可以做到這一點?如果你知道如何,你能幫助我嗎?因爲如果我必須做1000次,那麼這將是一個真正的痛苦。

這將基本上改變表單標籤的文本,例如,用戶點擊是我喜歡運動,代碼將加載模塊/類,並將label1.text更改爲+1點擊,它將更改label2。文本轉換爲「問題2」,但它不知道它是什麼形式,所以它將使用FormName中與參數一起給出的文本來找出它正在編輯的表單。那是什麼我嘗試在這裏

在短期完成,我只是希望它找到窗體名稱表單和視圖FormName.Label1.text = ""作爲Form1.Label1.text = ""

+0

你能發表更多的代碼嗎?我不知道什麼是不在這裏工作... – kush

+0

它不會看到FormName作爲一個類/窗體來調用/編輯例如它看到它的Text.Item不Class.Item,我想它認出它作爲一個類/窗體 –

+0

你不能因爲FormName是一個字符串,除非你創建一個新的類。或者一個擴展方法,取決於你的需要。 – Arman

回答

2

*假設只有一個期望的晶型的情況下,嘗試這樣的事情:

Public Sub IncrementValueBeta(SlideDescription As String, SlideNumber As Integer, FormName As String) 
    ChangeSlide(SlideNumber) 

    Dim frmTarget As Form = Nothing 
    For Each frm As Form In Application.OpenForms 
     If frm.Name.ToUpper = FormName.ToUpper Then 
      frmTarget = frm 
      Exit For 
     End If 
    Next 

    If Not IsNothing(frmTarget) Then 
     Dim matches() As Control = frmTarget.Controls.Find("ClickedTimes", True) 
     If matches.Length > 0 Then 
      AddClicks = matches(0).Text + 1 
      matches(0).Text = AddClicks 
     End If 
    End If 
End Sub 
1

我也會去用字典的方式。

Public Class Form1 
    Private slides As New Dictionary(Of Integer, String) 

    Private currentSlideNumber As Integer 
    Private currentSlideDescription As String 

    Public Sub IncrementByClick() 
     currentSlideDescription = slides(currentSlideNumber + 1) 
     currentSlideNumber += 1 

     ChangeSlide(currentSlideDescription) 
    End Sub 

    Public Sub ChangeSlide(ByVal slideDescription As String) 
     currentSlideNumber = SelectSlideNumberByDesc(slideDescription) 
     currentSlideDescription = slides(currentSlideNumber) 
     MessageBox.Show("Successfully changed the slide to slide no. " & currentSlideNumber) 
    End Sub 

    Private Function SelectSlideNumberByDesc(ByVal slideDesc As String) 
     Dim slideNumber As Integer 
     For Each slide In slides 
      If slide.Value = slideDesc Then 
       slideNumber = slide.Key 
       Exit For 
      End If 
     Next 
     Return slideNumber 
    End Function 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     slides.Add(1, "SLIDE_ONE") 
     slides.Add(2, "SLIDE_TWO") 
     slides.Add(3, "SLIDE_THREE") 
    End Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     ChangeSlide(TextBox1.Text) 
    End Sub 

    Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click 
     IncrementByClick() 
    End Sub 
End Class 

通過點擊按鈕1,幻燈片將根據用戶在文本框中輸入的幻燈片描述而改變。

通過單擊btnNext,下一張幻燈片將相應加載。

OO的方式更好,但這應該足以顯示它。