Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Chowanie form


filip1234

Pytanie

Opublikowano

Cześć, mam problem z jedną z moich form w moim programie.  Bawie się w pisanie Launchera do Minecrafta i posiadam taki kod:

Form1.TextBox1.Text = U
            Form1.TextBox1.Text = P
            Auth.Login(U, P)
            Delay(2)
            Form1.Hide()
            Main.Show()

 

Problem w tym, że Form1 nie chce się schować, znika na sekunde może dwie i znowu sie pokazuje. Nie wiem co moge zrobić aby znikneła.

 

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Nie pomogło. Posiadam dwie formy oraz dwie classy .vb, w Form1 mam 2x textbox i button wpisuje tam dane do konta MC i wysyłam te dane do classy Auth.vb gdzie wysyłam zapytanie json`em do Mojang. Otrzymuje odpowiedź itd...i gdy passy są poprawne zapisuje je w clasie Config.vb(config.cfg). Następnie gdy odpalam aplikacje ponownie sprawdzam czy w "config.cfg" są dane jeśli są to pobieram je i wysyłam odrazu do classy Auth czyli wysyłam zapytanie do Mojang i znowu...gdy passy są poprawne chce aby Form1 znikał a pojawiał się Form2, wszystko ładnie działa, ale gdy się pojawi Form2 to odrazu pojawia się też Form1 które wcześniej schowałem. W Form2 też dodałem Form1.Hide() ale też nie działa :/

 

Trochę masło maślane ale nie wiem jak to inaczej wytłumaczyć.

 

Pozdrawiam.

Opublikowano

Chowam normalnie 

Auth.Login(U, P)
            Main.Show()
            Form1.Hide()

 

Main się pojawia ale razem z Form1 nawet jak w Main_Load dodam "Form1.Hide()" też nie działa :/

Opublikowano

Musisz się odwołać do aktualnej instancji danej formy, czyli nie robisz Form1.Hide() tylko (w przypadku C#) This.hide(); a w VB to jest chyba Me.Hide()

graphic.png

Opublikowano

Tylko problem w tym, że nie wiem gdzie dodać to "Me.Hide()" wiem, że w Form1 ale nie wiem w jakim miejscu. Kod który podałem wyżej jest wywoływany w osobnej klasie "Config" i tam posiadam ten kod "Form1.Hide()"

Opublikowano

Widać źle wytłumaczyłem, spróbuję jeszcze raz.

Posiadam Formę "Form1" w "Form1_Load" dodałem ładowanie całego Configu "Launchera".(Klasa Config to nie Forma )

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Me.Size = New Size(331, 263)
        Config.Load()
    End Sub

Ładowanie Configu zrobiłem tak(Config.vb):

Public Shared Sub Load()
        'Dim FirstRun As Boolean = True
	        If File.Exists(GameDir & "\Launcher\config.cfg") Then
            'FirstRun = False
            ConfigFile = XDocument.Load(GameDir & "\Launcher\config.cfg")
            Dim U As String = ConfigFile.<LauncherConfig>.<Auth>.<Credentials>.@u
            Dim P As String = ConfigFile.<LauncherConfig>.<Auth>.<Credentials>.@p  'Pobiera login i hasło do konta z config.cfg
	    Form1.TextBox1.Text = U
            Form1.TextBox2.Text = P
            Auth.Login(U, P) 'Tutaj loguję automatycznie
	    Main.Show()
            Form1.Hide()
        Else
            Form1.Show()
        End If
End Sub
Opublikowano

Pokaż jak wyświetlasz Form2. Nie wiem jak to wygląda w VB, ale w C# robiłem tak:
 

            this.Hide();
            if (!Application.OpenForms.OfType<Form2>().Any())
            {
                new Form2().Show();
            }

 

Obraz (19).png

Opublikowano

Nie rozumiem o co chodzi, nie posiadam twojego kodu i nie wiem co dokładnie chcesz osiągnąć, ale ten kod można wywołać np. po wciśnięciu przycisku etc.

graphic.png

Opublikowano

Chyba powinieneś przekazać do metody w klasie config instancje obecnie otwartej Form1 i na niej wykonać metodę Hide().

Obraz (19).png

Opublikowano

Nie wiem czy dobrze to zrobiłem ale nie działa mi to.

Config.vb:

 

Imports System.IO
Imports Newtonsoft.Json.Linq
Imports System.Environment

Public Class Config
    Public Shared ConfigFile As XDocument

    Private form As Form1

    Public Sub New(_form As Form1)
        form = _form
    End Sub

    Public Shared Sub Load()
        Dim FirstRun As Boolean = True

        If File.Exists(GameDir & "\Launcher\config.cfg") Then
            FirstRun = False
            ConfigFile = XDocument.Load(GameDir & "\Launcher\config.cfg")
            Dim UserName As String = ConfigFile.<LauncherConfig>.<Auth>.<Credentials>.@u
            Dim Password As String = ConfigFile.<LauncherConfig>.<Auth>.<Credentials>.@p
            Dim LoggedIn As String = ConfigFile.<LauncherConfig>.<Auth>.<Credentials>.@a

            If LoggedIn = True And Not String.IsNullOrEmpty(UserName) And Not String.IsNullOrEmpty(Password) Then 'Jeśli zalogowany = true i username oraz password NIE JEST puste wtedy...
                Dim NickName = ConfigFile.<LauncherConfig>.<Auth>.<NickName>.Value
                Dim AccessToken = ConfigFile.<LauncherConfig>.<Auth>.<AccessToken>.Value
                Dim ClientToken = ConfigFile.<LauncherConfig>.<Auth>.<ClientToken>.Value
                Dim UUID = ConfigFile.<LauncherConfig>.<Auth>.<UUID>.Value

                If NickName = "0" And AccessToken = "0" And ClientToken = "0" And UUID = "0" Then
                    Auth.Login(UserName, Password)
                Else
                    Auth.Refresh(NickName, AccessToken, ClientToken, UUID)
                End If
            End If
        Else
            Form1.Show()
        End If
    End Sub
End Class

 

 

A w Form1(moja pierwsza Forma która się pojawia po uruchomieniu programu) dodałem tylko

Dim cfg As New Config(Me)

Pod

Public Class Form1

 

Chowanie Form1 mam w Auth.vb to może ten kod co mi podałeś dodać do Auth.vb?

 

Pozdrawiam.

 

PS. Cały Config.vb jak i Auth.vb przeniosłem do jednej formy "Form1" niestety nadal to samo, forma nie chce się schować. :/

Opublikowano

Nie do końca wiem jak to działa na vb ale w c# robisz to poprzez parametr w konstruktorze o tak:

Klasa Config.cs w której mamy konstruktor:

Form1 form;
public Config(Form1 _form)
{
	form = _form;
}

po czym w formie głównej przekazujesz parametr do configu:

Config cfg = new Config(this);

słówkiem "this" przekazujesz aktualną instancję klasy Form1 do klasy Config, a w vb jest to słówko "Me".

Spróbuj sobie sam ogarnąć temat konstruktorów i przekaż w ten sam sposób parametr w vb.

Nie jestem pewny ale może to wyglądać tak:

Public Class Config 
	Private Dim form As Form1
	
	Public Sub New(_form As Form1)
          form = _form
	End Sub
End Class

po czym w formie głównej tworzysz config:

 

Dim cfg As New Config(Me)

 

graphic.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...