Problem z ukrywaniem głównego okna

0

Witam.

Przejrzałem kilka tematów na forum, ale nie pomogło mi to :/
Więc jeszcze raz...

Mam takiego mainforma:

        public MainForm()
        {
            InitializeComponent();
            Odpal();
        }

Teraz w Odpal(); uruchamiam nowego forma i chciałbym zamknąć tego głównego... nie wiem jednak jak się do niego odwołać :/

Próbowałem w Odpal(); czegoś takiego:

this.Hide();
MainForm.Hide();

Wpisywałem jeszcze w tym nowym formie "MainForm.Hide();", ale chyba coś cały czas kaszanię :/ proszę bardzo o naprowadzenie.

0

Musisz przekazac temu nowemu referencje do glownej formy, zeby mogl na niej dzialac.

0

No, ok ale to rozwiąże gdybym chciał to robić już w nowej formatce. A jak ukryć ten główny formularz z innej klasy po prostu ?

0

No to jak z innej klasy to musisz obiektowi tej klasy przekazac referencje do tego formularza, tak jak pisalem. Chyba sie zgubilem w tym, co chcesz zrobic.

0

heh prawdopodobnie to nie Ty się zgubiłeś, tylko ja jestem tak tępawy ;]

program u mnie wygląda mniej więcej tak:

public class MainForm : System.Windows.Forms.Form
{
        public MainForm()
        {
        InitializeComponent();
        Odpal();
        }

        void Odpal()
        {
        Form panel = new Panel();
        panel.Show();
        // tu chce jakos ukryc MainForm
        }
}

Gdybyś mógł proszę napisać jak przekazać referencję do Odpal to będę wdzięczny :/

0

Najpierw chowaj glowna, a pozniej pokazuj panel. Show() oznacza pokazanie panelu i przekazanie sterowania do niego, co oznacza, ze wszystko co robisz pozniej wykona sie dopiero po tym jak panel skonczy dzialanie. Pewnie dlatego glowna ci sie nie chowala.

0
johny_bravo napisał(a)

Najpierw chowaj glowna, a pozniej pokazuj panel. Show() oznacza pokazanie panelu i przekazanie sterowania do niego, co oznacza, ze wszystko co robisz pozniej wykona sie dopiero po tym jak panel skonczy dzialanie. Pewnie dlatego glowna ci sie nie chowala.

No ok, dałem teraz tak:

public class MainForm : System.Windows.Forms.Form
{
        public MainForm()
        {
        InitializeComponent();
        Odpal();
        }

        void Odpal()
        {
        Hide(); //próbowałem jeszcze this.Hide();
        Form panel = new Panel();
        panel.Show();
        }
}

ale nadal mi się pokazuje ten pierwszy panel :/

0

Ok, chyba wiem co jest nie tak - w trakcie dzialania konstruktora tak naprawde formatka jeszcze nie jest pokazana, wiec nie moze sie tez schowac. Najlepiej wywolanie tego panelu daj w glownej petli (zazwyczaj Program.cs), a dopiero pozniej stworzenie formatki.

0

Próbowałem na kilka nowych sposobów ale nadal nic...

Wkleją cały kodzik :/ jestem początkujący więc może gdzieś zrobiłem po prostu jakiś głupi błąd i przez to cały czas nie działa:

using System;
using System.Drawing;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using System.Diagnostics;
using System.Collections;

namespace Slownik_danych
{

    public class MainForm : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Label komunikat;
        private System.Windows.Forms.Label login_label;
        private System.Windows.Forms.Label naglowek;
        private System.Windows.Forms.TextBox passwordBox;
        private System.Windows.Forms.Label password_label;
        private System.Windows.Forms.Button button_logowanie;
        private System.Windows.Forms.TextBox loginBox;

        private System.Data.DataSet NewDataSet;
        SqlDataAdapter MySqlDataAdapter;

       
        static public string zapytanie;
        static public string polaczenie;
        static public string login;
        static public string haslo;
        static public string[] tablica;

        public MainForm()
        {
            InitializeComponent();
         }

        [STAThread]
        public static void Main(string[] args)
        {
            //Pobieram sobie  argumenty z lini komend (login i haslo)
            tablica = new string[5]; 
            int i = 0;
            foreach (string myArg in args)
            {
                tablica[i++] = myArg;
            }

            zapytanie = "select * from slo_rodz_ob";
            polaczenie = "Data Source=Server; Initial Catalog=baza; uid=" + tablica[0] + "; pwd=" + tablica[1] + "";
           
           //----------------------------------------
 
            MainForm form = new MainForm();
            form.Odpal();
            
            Application.Run(new MainForm());

          
        }



        #region Windows Forms Designer generated code

        private void InitializeComponent()
        {
            this.loginBox = new System.Windows.Forms.TextBox();
            this.button_logowanie = new System.Windows.Forms.Button();
            this.password_label = new System.Windows.Forms.Label();
            this.passwordBox = new System.Windows.Forms.TextBox();
            this.naglowek = new System.Windows.Forms.Label();
            this.login_label = new System.Windows.Forms.Label();
            this.komunikat = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // loginBox
            // 
            this.loginBox.Location = new System.Drawing.Point(202, 162);
            this.loginBox.Name = "loginBox";
            this.loginBox.TabIndex = 23;
            this.loginBox.Text = "";
            // 
            // button_logowanie
            // 
            this.button_logowanie.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.button_logowanie.Location = new System.Drawing.Point(146, 226);
            this.button_logowanie.Name = "button_logowanie";
            this.button_logowanie.Size = new System.Drawing.Size(128, 24);
            this.button_logowanie.TabIndex = 27;
            this.button_logowanie.Text = "Zaloguj";
            this.button_logowanie.Click += new System.EventHandler(this.Button1Click);
            // 
            // password_label
            // 
            this.password_label.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.password_label.Location = new System.Drawing.Point(122, 194);
            this.password_label.Name = "password_label";
            this.password_label.Size = new System.Drawing.Size(56, 16);
            this.password_label.TabIndex = 26;
            this.password_label.Text = "Haslo: ";
            // 
            // passwordBox
            // 
            this.passwordBox.Location = new System.Drawing.Point(202, 194);
            this.passwordBox.Name = "passwordBox";
            this.passwordBox.PasswordChar = '*';
            this.passwordBox.TabIndex = 24;
            this.passwordBox.Text = "";
            // 
            // naglowek
            // 
            this.naglowek.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.naglowek.Font = new System.Drawing.Font("Tahoma", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.World, ((System.Byte)(238)));
            this.naglowek.Location = new System.Drawing.Point(122, 82);
            this.naglowek.Name = "naglowek";
            this.naglowek.Size = new System.Drawing.Size(176, 40);
            this.naglowek.TabIndex = 28;
            this.naglowek.Text = "Logowanie do systemu";
            this.naglowek.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // login_label
            // 
            this.login_label.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.login_label.Location = new System.Drawing.Point(122, 170);
            this.login_label.Name = "login_label";
            this.login_label.Size = new System.Drawing.Size(64, 16);
            this.login_label.TabIndex = 25;
            this.login_label.Text = "Login: ";
            // 
            // komunikat
            // 
            this.komunikat.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.komunikat.ForeColor = System.Drawing.SystemColors.HotTrack;
            this.komunikat.Location = new System.Drawing.Point(122, 130);
            this.komunikat.Name = "komunikat";
            this.komunikat.Size = new System.Drawing.Size(176, 24);
            this.komunikat.TabIndex = 29;
            this.komunikat.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // MainForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.ClientSize = new System.Drawing.Size(424, 333);
            this.Controls.Add(this.komunikat);
            this.Controls.Add(this.naglowek);
            this.Controls.Add(this.button_logowanie);
            this.Controls.Add(this.password_label);
            this.Controls.Add(this.login_label);
            this.Controls.Add(this.passwordBox);
            this.Controls.Add(this.loginBox);
            this.Font = new System.Drawing.Font("Tahoma", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World, ((System.Byte)(238)));
            this.Name = "MainForm";
            this.Text = "MainForm";
            this.ResumeLayout(false);
        }
        #endregion
        void Button1Click(object sender, System.EventArgs e)
        {
                this.Hide();
        }

        void Odpal()
        {
            Visible = false;
            try
            {
                MySqlDataAdapter = new SqlDataAdapter(zapytanie, polaczenie);
                NewDataSet = new DataSet();
                MySqlDataAdapter.Fill(NewDataSet, "baza");
                login = loginBox.Text;
                haslo = passwordBox.Text;

                Hide();
                Form panel = new Panel();
                panel.Show();
              
            }
            catch (Exception)
            {
                komunikat.Text = "To nie jest poprawne haslo";
            }
        }

    }
}
0

Hmm, troche nie rozumiem, co chcesz osiagnac. Na glownej formatce masz pola do wpisywania hasla i loginu. Ale przy starcie zamiast pokazywac ta formatke chcesz ja schowac i pokazac zamiast tego Panel - ktory to panel nie moze istniec bez formatki. Do czego Ci ten Panel? I dlaczego chcesz chowac glowna formatke na dzien dobry, skoro nic innego nie masz? Jesli koniecznie chcesz ja chowac to sprobuj w zdarzeniu onShow dac Hide z jakas flaga, zeby tylko za pierwszym razem sie dzialo. Ale zastanow sie jeszcze co z tym panelem, bo teraz to wyglada nieco bezsensownie.

0

To działa tak...

Aplikacja jest uruchamiana z dwoma parametrami, które przesyłane są w linii komend. Następnie są one czytane właśnie przez aplikację i jeśli są poprawne wyświetlana jest druga formatka, a pierwsza jest ukrywana. Jeśli natomiast coś się nie zgadza pojawia się panel do logowania.

Ten drugi panel, który jest już wywoływany łączy się z BD i czyta informacje... które są wyświetlane w drugiej formatce.

sprobuj w zdarzeniu onShow dac Hide z jakas flaga

możesz coś dokładniej ? :/

0

Wszystko ok, tylko, ze nie masz drugiej formatki... Panel to nie formatka, a element zalezny od formatki, bez niej sie nie wyswietli.

Co do drugiego to cos w tym stylu:

  • stworz sobie skladowa bool firstStart;
  • pozniej w zdarzeniu onShow

    if(firstStart)
    {
    firstStart = false;
    Hide();
    }
</ul>

Mysle, ze powinno dzialac, nie sprawdzalem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1