2013-12-18 35 views
0

我做了一個自定義的用戶控件,包含一個複選框以及幾個文本框和一些代碼。我發現它在設計模式中顯示在組件工具箱中,但是當我將它拖到項目中時,它給了我一個錯誤,如「未能創建組件」,「未找到構造函數」以及圍繞稱爲綁定的一些聲明。在設計模式中添加自定義控件

我本來並不打算在設計模式中使用它,但由於我現在知道它的一種可能性,如果它有可能使其設計模式兼容,id有興趣?

編輯: 控制組件被設計在設計模式中,它們是 「cCheckbox」 - 一個通/斷開關 「cInterval」 - 一個文本框僅允許數字 「CUNIT」 - 一個下拉組合框與來自單元第二至每天 控制的目的是提供產生打勾事件在你的構造方案

Public Class ucTimer1 
    Public Event Tick(time As Date) 
    Private WithEvents t As New Timer With {.Interval = 1000} 
    Private lastTick As DateTime = DateTime.UtcNow 
    Private interval As TimeSpan 
    Public persistent As Boolean = True 
    Public sDat As New List(Of Object) 

Public Sub New(Optional sDat() As Object = Nothing) 
    InitializeComponent() 
    turnOff() 
    AddHandler cCheck.CheckedChanged, Sub() If cCheck.Checked Then turnOn() Else turnOff() 
    cUnit.SelectedIndex = 1 

    If Not sDat Is Nothing Then 
     lastTick = sDat(0) 
     cInterval.Text = sDat(1) 
     cUnit.SelectedIndex = sDat(2) 
     cCheck.Checked = sDat(3) 
    End If 
End Sub 
Public Sub textFilter(sender As Object, e As KeyPressEventArgs) Handles cInterval.KeyPress 
    If e.KeyChar <> Convert.ToChar(8) Then 
     If Not "".Contains(e.KeyChar.ToString) Or cInterval.Text.Length > 2 Then 
      e.Handled = True 
     End If 
    End If 
End Sub 
Public Sub turnOff() 
    If cCheck.Checked = True Then cCheck.Checked = False 
    cCheck.ForeColor = Color.DarkRed 
    cInterval.Enabled = False 
    cUnit.Enabled = False 
    cIntervalBackground1.BackColor = BackColor 
    cIntervalBackground2.BackColor = BackColor 
    save() 
End Sub 
Public Sub turnOn() 
    If cCheck.Checked = False Then cCheck.Checked = True 
    cInterval.Enabled = True 
    cUnit.Enabled = True 
    cIntervalBackground1.BackColor = cInterval.BackColor 
    cIntervalBackground2.BackColor = cInterval.BackColor 
    evalInterval() 
End Sub 
Private Sub evalInterval() Handles cInterval.TextChanged, cUnit.SelectedIndexChanged 
    Dim seconds As Integer 
    If Not Integer.TryParse(cInterval.Text, seconds) Then seconds = 0 

    Select Case cUnit.SelectedIndex 
     Case 0 
      seconds *= 1 
     Case 1 
      seconds *= 60 
     Case 2 
      seconds *= 3600 
     Case 3 
      seconds *= 86400 
     Case Else 
      seconds *= 0 
    End Select 

    If seconds < 1 Then 
     cCheck.ForeColor = Color.DarkRed 
     t.Enabled = False 
    Else 
     interval = New TimeSpan(0, 0, seconds) 
     cCheck.ForeColor = Color.Green 
     t.Enabled = True 
    End If 
    save() 
End Sub 
Private Sub ticker() Handles t.Tick 
    If interval = Nothing Then Return 
    If DateTime.Now - lastTick > interval Then 
     lastTick = DateTime.Now 
     RaiseEvent Tick(DateTime.Now) 
    End If 
End Sub 
Private Sub save() 
    If Not persistent Then Return 
    sDat.Clear() 
    sDat.Add(lastTick) 
    sDat.Add(cInterval.Text) 
    sDat.Add(cUnit.SelectedIndex) 
    sDat.Add(cCheck.Checked) 
End Sub 
End Class 
+0

你能張貼您的碼? – Jade

回答

1

嘗試添加新的構造不帶參數,改變原有建築這樣

因爲VB.Net要求「的Public Sub New()」中的設計模式構造

....Codes before this 

Public Sub New() 
    InitializeComponent() 
    turnOff() 
    AddHandler cCheck.CheckedChanged, Sub() If cCheck.Checked Then turnOn() Else turnOff() 
    cUnit.SelectedIndex = 1 
End Sub 

Public Sub New(ByVal sDat() As Object) 
    InitializeComponent() 
    turnOff() 
    AddHandler cCheck.CheckedChanged, Sub() If cCheck.Checked Then turnOn() Else turnOff() 
    cUnit.SelectedIndex = 1 
    If Not sDat Is Nothing Then 
     lastTick = sDat(0) 
     cInterval.Text = sDat(1) 
     cUnit.SelectedIndex = sDat(2) 
     cCheck.Checked = sDat(3) 
    End If 
End Sub 

......Rest of your Code 
0

的另一部分用戶修改計時器,檢查它是否是設計模式,只是它運行特定代碼不在設計模式中,例如:

Public Sub New(Optional sDat() As Object = Nothing) 
    InitializeComponent() 

    If Not Me.DesignMode Then 
     turnOff() 
     AddHandler cCheck.CheckedChanged, Sub() If cCheck.Checked Then turnOn() Else turnOff() 
     cUnit.SelectedIndex = 1 

     If Not sDat Is Nothing Then 
      lastTick = sDat(0) 
      cInterval.Text = sDat(1) 
      cUnit.SelectedIndex = sDat(2) 
      cCheck.Checked = sDat(3) 
     End If 
    End If 
End Sub 

進行了更改並重新生成解決方案(強制生效),然後在設計模式下再次嘗試。

相關問題