2016-10-13 9 views
0

Вот простой пример того, что я делаю в реальном приложенииНевозможно обновить ToolStrip с помощью файла класса

ФОРМУ СОДЕРЖАЩИЙ MAIN SUB OpenNew.vb

Шаг 1 - Основные подсказки пользователю для ввода с помощью диалога в тот же файл (OpenNew.vb) Шаг 2 - Выбор пользователей Какой тип проекта они открываются, тип 1 или тип 2 Шаг 3 - strOpenNewResponse заполняется при OpenNew диалог закрывается Шаг 3 - Форма открыт на основе выбора

Public Class OpenNew 

    Public Shared strOpenNewResponse As String = Nothing 

    Public Shared Sub Main() 

     OpenNew.ShowDialog() 

    If strOpenNewResponse IsNot Nothing Then 

     Dim formToShow As Form = Nothing 

     Select Case strOpenNewResponse 
      Case "Type1" 
       formToShow = New Form1 
       formToShow.ShowDialog() 
      Case "Type2" 
       formToShow = New Form2 
       formToShow.ShowDialog() 
     End Select 

    End If 
End Sub 
End Class 

Form1 будет иметь StatusBar с одним ToolStrip и TreeView:

Public Class Form1 

Inherits Form 

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown 

    Utilities.DisplayStatus("Loading, Please Wait...") 

    Me.Cursor = Cursors.WaitCursor 

    PopulateTreeView("Root Node") 

    Utilities.DisplayStatus("Process Complete") 

    Me.Cursor = Cursors.Default 

End Sub 

End Class 

Затем файл класса назван Utilities.vb

Public Class Utilities 

Public Shared Sub DisplayStatus(ByVal strStatusMessage As String) 

    Form1.toolstripDisplayStatus.Text = strStatusMessage 
    Form1.toolstripDisplayStatus.Visible = True 
    Form1.statusstripParent.Refresh() 

End Sub 

End Class 

Когда я делаю это ToolStrip товара никогда обновлений. Он просто остается значением по умолчанию.

Конечно, если я бег это так (без класса)

Public Class Form1 

Inherits Form 

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown 

    Me.Cursor = Cursors.WaitCursor 

    toolstripDisplayStatus.Text = "Loading, Please Wait..." 
    toolstripDisplayStatus.Visible = True 
    statusstripParent.Refresh() 

    PopulateTreeView("Root Node") 

    toolstripDisplayStatus.Text = "Process Complete" 
    toolstripDisplayStatus.Visible = True 
    statusstripParent.Refresh() 

    Me.Cursor = Cursors.Default 

End Sub 

End Class 

Я думал, что это может быть проблемой с каким-то общественным/частным конфликтом, но я до сих пор не могу понять это ,

Я мог бы просто быть ослепленным очевидным в этой точке

Может кто-нибудь дать мне представление о том, что может быть причиной этого?

ADDED заблокированные soohoonigan

enter image description here

+0

Когда вы используете класс утилит, я не вижу ссылки на основную форму, передаваемую ей в любом месте. Ваш компилятор не выделяет текст «Form1» внутри этого класса? – soohoonigan

+0

Нет, просто указывая на Form1, как всегда – mreinsmith

+0

Как вы открываете форму? Открываете ли вы его самостоятельно или открываете его в качестве первой формы своего заявления? –

ответ

1

formToShow = Form1 будет работать (удалить New)

Ваш класс Utilities ссылается Form1 непосредственно, но у вас есть только экземпляр этого. С другой стороны, если вам нужно несколько экземпляров Form1 вы могли бы пройти в форме к югу, как это:

Public Shared Sub DisplayStatus(ByVal temp As Form1, ByVal strStatusMessage As String) 

    temp.toolstripDisplayStatus.Text = strStatusMessage 
    temp.toolstripDisplayStatus.Visible = True 
    temp.statusstripparent.Refresh() 

End Sub 

и назвать его, как например:

Utilities.DisplayStatus(Me, "Loading, Please Wait...") 
+0

Еще раз спасибо, что будет очень полезно – mreinsmith

+0

@mreinsmith Добро пожаловать. Теперь вы понимаете, почему это не сработало, как вы его закодировали? – topshot

+0

Я так считаю, что при создании NEW object formToShow мне пришлось бы ссылаться на это вместо form1 – mreinsmith

 Смежные вопросы

  • Нет связанных вопросов^_^