Wątek przeniesiony 2015-04-02 13:33 z C# i .NET przez somekind.

Wykonywanie akcji w momencie otwarcia okna

0

Mam problem dotyczący wykonywania akcji w momencie otwarcia okna. Mój Form1 po kliknięciu przycisku otwiera Form3, w którym musi się wykonać akcja. Niestety nie mogę użyć Shown w Form1 bo wtedy będę mógł wykonać metodę z Form3 w Form1 a nic mi to nie da. Jakieś pomysły ?

InitializeComponent(); tak zadziała ?

0

Load jest wykonywane przy każdy odpaleniu okna.
https://msdn.microsoft.com/pl-pl/library/system.windows.forms.form.load%28v=vs.110%29.aspx

natomiast InitializeComponent jest wykonywane przy tworzeniu instancji obiektu.

0

Zrobiłem to trochę inaczej, wrzuciłem kod do konstruktora i faktycznie przy teście zadziałało. Niestety mam teraz inny problem.

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using WindowsFormsApplication1;

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        OracleConnection conn = new OracleConnection();
        public Form3()
        {
             InitializeComponent();
             Form1 m = new Form1();
             String connectionString = "user id=" + m.TextBox1Text + ";password="
                  + m.masked1 + ";data source=(DESCRIPTION=(ADDRESS=" +
                  "(PROTOCOL=tcp)(HOST=" + m.TextBox3TEXT +
                      ")" +
                  "(PORT=" + m.TextBox4TEXT + "))(CONNECT_DATA=(SERVICE_NAME=" +
                  m.TextBox5TEXT + ")))";
             using (OracleConnection conn = new OracleConnection(connectionString))
             {

                 conn.Open();
                 
             }
        }

        


        
       private void button1_Click(object sender, EventArgs e)
       {
           OracleCommand cmd = conn.CreateCommand();
           cmd.CommandText = "INSERT INTO dept VALUES ('66666', 'trololo61')";
           cmd.ExecuteNonQuery();
       }
        
    }
}

conn.Open(); z mojego konstruktora kończy się w momencie zakończenia wykonywania jego kodu. Nie jest to zmienna, którą mogę zadeklarować przed klasą by była globalna, więc przy okazji button1_Click zanim wpiszę wszystko co jest w środku, musiałbym jeszcze raz otworzyć połączenie, a bardzo chciałbym to jakoś pominąć. Da się to jakoś zrobić?

1

Nie ma to jak tworzyć w konstruktorze okna inne okna, operować na pustych wartościach i łaczyć się do bazy.

Żeby zrobić to prawidłowo musisz jeszcze przez rok uczyć się programowania obiektowego. W konsoli.

0

gdzie wg. Ciebie tworze w konstruktorze okna inne okna?

0

W tym kodzie masz tylko jeden konstruktor i jedno new, nietrudno znaleźć.

0

przeciez to jest tworzenie instancji a nie okna ..

0
foxwsp napisał(a):

przeciez to jest tworzenie instancji a nie okna ..

Instancji (czyli obiektu) okna, bo przecież Form1 to jest klasa reprezentująca okno aplikacji.

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