Wątek przeniesiony 2014-08-31 00:07 z C# i .NET przez somekind.

Przeładowanie zmiennych

0

Cześć.

Słuchajcie, piszę program do blokowania folderów na hasło.

Na razie mam główny formularz, w którym ustala się ścieżkę do folderu oraz formularz Ustaw hasło ( otwierany po wciśnięciu powiedzmy Button1 ).

Główny formularz, nazwijmy go Main ma zmienną string, w której ma zostać zapisane hasło.
Otwieram formularz ustawiania hasła za pomocą Button1, przypisuję do zmiennej wartość z pola tekstowego i ta zmienna ( z Main ) przyjmuje tą ustawioną wartość ale tylko w formularzu ustawiania hasła, jeśli go zamkniemy i próbujemy wyświetlić zawartość tej zmiennej z hasłem w okienku Main to ta zmienna jest nadal pusta.

Jak zrobić aby w kolejnych formularzach móc operować zmiennymi, które znajdują się w Main ?
Dostaję się do niej tak ( w okienku do ustawiania hasła )
Main main_activity = new Main();
main_activity.password = textBox1.Text;
No i to działa, przypisuje jej wartość ale tak jak mówię tylko w formularzu ustawiania hasła ;/

Mam nadzieję, że w miarę jasno wytłumaczyłem swój problem.
Proszę o pomoc

0

Uruchamiając program zmienne inicjowane są na nowo jeśli będzie gdzieś pole int a = 5 to nie ważne ile razy nadpiszesz tą wartość i tak z kolejnym uruchomieniem programu a będzie równe 5. Aby temu zapobiec musisz przechować gdzieś tą zmienną i z uruchomieniem programu wczytać ją np z pliku txt, xml,z pliku konfiguracyjnego czy bazy danych. Dodatkowo problemem jest to że chcesz przechować hasło, a hasło nie powinno być przechowywane zwykłym tekstem bo ktoś może po prostu znaleźć twój plik, dlatego powinno się je szyfrować.
http://weblogs.asp.net/jongalloway//encrypting-passwords-in-a-net-app-config-file

0

Ja nie wiem czy dobrze zrozumiałem ale pewnie źle przekazujesz dane między oknami. Daj jakiś kod który pokazuje jak to robisz.

0

Damian ale ja nie uruchamiam na nowo programu tylko otwieram kolejny Form za pomocą:
setpassword pass_dial = new setpassword();
pass_dial.Show();

Plik główny:

 
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 System.Xml;

namespace WindowsFormsApplication1
{
    public partial class Main : Form
    {
        public string dir_password = "";
        public string directory;
        public Main()
        {
            InitializeComponent();
        }

      
        private void browse_button_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                directory = folderBrowserDialog1.SelectedPath;
                folder_path.Text = folderBrowserDialog1.SelectedPath;
            }          
        }

        private void nowaBlokadaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Restart();
        }

        private void button_setpassword_Click(object sender, EventArgs e)
        {
            setpassword pass_dial = new setpassword();
            pass_dial.Show();
        }

        private void button_lock_Click(object sender, EventArgs e)
        {
            MessageBox.Show(directory);
            if (dir_password == "")
            {
                MessageBox.Show("Nie podałeś hasła", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }

    }
}



Kod źródłowy setpassword:

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 System.Xml;

namespace WindowsFormsApplication1
{


    public partial class setpassword : Form
    {
        public setpassword()
        {
            InitializeComponent();
        }
        Main main_activity = new Main();
        private void button_password_ok_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(setpassword_1.Text) && String.IsNullOrEmpty(setpassword_2.Text))
            {
                MessageBox.Show("Wypełnij wszystkie pola", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            else
            {
                if (setpassword_1.Text != setpassword_2.Text)
                {
                    MessageBox.Show("Hasła nie pasują do siebie", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
                else
                {
                    MessageBox.Show(main_activity.directory);
                }
            }
        }

        private void button_password_cancel_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
    }
}

Dobra, w tym kodzie mam Main, w którym wybieram folder. Ścieżkę do folderu przypisuję do zmiennej directory. Dla testów wyświetlam tą zmienną za pomocą przycisku Zablokuj ( kontrolka Main ) i to działa ale jak otworzę setpassword za pomocą przycisku Ustaw hasło ( kontrolka main ) to ten Form setpassword już mi nie wyświetli zawartości zmiennej directory.

Docelowo ma być tak że w formularzu setpassword ustawiam hasło i to hasło przypisuje się do zmiennej znajdującej się w form Main i już ta wartość od razu się tam znajduje.

Jeśli chodzi o szyfrowanie hasła itp no to sprawa oczywista ale po co mam się tym teraz zajmować jak mam taki problem ;/

Ogólnie próbuję to napisać na podobiznę tego projektu:
http://www.codegain.com/articles/csharp/miscellaneous/folder-protection-for-windows-using-c-sharp.aspx
jednak w wersji dostosowanej bardziej do swoich potrzeb.

1

Aby dostać się do zmiennej z drugiej formy:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Form2 f = new Form2(this);

        }
        public int X { get; set; }
} 
public partial class Form2 : Form
    {
        private Form1 form1;
        public Form2(Form1 form1)
        {
            InitializeComponent();
            this.form1 = form1;
            form1.X = 5;
        }

    } 
0

Zamiast dostawać się do zmiennej drugiej formy, lepiej zrobić eventa, w takiej samej konwencji jak są zrobione pozostałe eventy w WinForms.

0

Wielkie dzięki damian !

Na razie nie zamykam tematu w razie innych problemów.

Pozdrawiam :)

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