Problem z przypisaniem zmiennych Windows Forms

0

Cześć wszystkim, programuje sobie aplikacje desktopową, jedną z wielu funkcji jest możliwość wysłania maila. Wysyłanie maila odbywa się od wyświetlenia nowego okna Form2, w tym oknie konfigurujemy ustawienia naszego maila, czyli port, server, adres, hasło. Następnie zamykamy okno, w głównym oknie Form1 po naciśnięciu przycisku "Wyślij mail" zostaje odkryte UserControl1 w którym wpisujemy docelowego maila, tytuł oraz treść. Również po naciśnięciu "Wyślij" wywoływany jest kod służący do wysłania wiadomości, "pobiera" zmienne z Form2 i podstawia je w dane miejsca w UserControl1. Problem polega na tym, że wpisane zmienne do Form2(server,port itd) nie zostają przypisane i otrzymuję komunikat o wartościach null. Kiedy przypisałem te wartości samodzielnie w kodzie wszystko działało poprawnie.
Kod wykonywany po naciśnięciu przycisku "Wyślij"(UserControl1)

screenshot-20170803125122.png

Form2, oraz zmienne które "zerują" się kiedy chce wysłać wiadomość poprzez UserControl1

screenshot-20170803125546.png

Ustawienia, aby zmienne zostały zapisane:

screenshot-20170803125727.png

Błąd, który otrzymuje:

screenshot-20170803125816.png

1

Nie ustawiasz wartości From dla emaila.

Czemu piszesz w C# 1.0?
Czemu wklejasz kod jako obrazki?

0

@somekind: Możesz rozwinąć myśl z wartością Form dla emaila ? Aby mieć dostęp do elementów z Form2 używam

private Form2 otherForm = new Form2();

Skąd wnioskujesz, że wersja c# to 1.0, nie jest ona ściśle połączona z MSV ? Posiadam najnowszą wersje z wszystkimi updateami.
Wybacz za te obrazki, następnym razem użyję poprawnego zapisu.

0
  1. Ja nie napisałem nic o żadnym Form dla emaila.

  2. Widzę C# 1.0, to mówię. Od C# 2.0 nie trzeba tworzyć pól dla propertisów, wystarczy napisać np.: public string Email { get; set; }.

0

@somekind: W takim razie co miałeś na myśli pisząc "Nie ustawiasz wartości From dla emaila." ?

0

Wyjątek, który ci się pokazuje, mówi, że w konstruktorze klasy MailMessage wartość zmiennej from jest nullem. Stąd twój otherForm.Email jest nullem najprawdopodobniej.

0

@Ktos: Tak, wiem. Błąd wskazuje na pierwszy atrybut, jeśli

string email;

Przybierze jakąkolwiek wartość, tj przypisze ją w kodzie nie poprzez wywołanie aplikacji i wpisanie maila do okienka, wtedy atrybut from będzie spełniony a błąd odwoła się do kolejnego po nim atrybutu w tym przypadku port.
Wygląda na to, że zmienne z Form2 nie zapisują tych wartości.

0

A jak wywołujesz Form2 i jak pobierasz z niego dane do Form1?

0

@somekind:
W UserControl1 wywołuje private Form2 otherForm = new Form2(); następnie już mogę wywołać dane elementy otherForm.Email, otherForm.Server itd. Jeśli do stringów w Form2 przypisze dane wartości już w kodzie czyli:

            Email ="[email protected]";
            User = "user";
            Pass = "password";
            Server ="smtp.gmail.com";
            Port = 576; 

Wtedy wszystko działa jak należy, inaczej dzieje się kiedy do powyższych stringów przypisze wartości textBox1.Text;,textBox2.Textitd.

0

Wrzuć projekt, bo tak to z fusów wróżyć będziemy i bez sensu.

0
maxbutler napisał(a):

W UserControl1 wywołuje private Form2 otherForm = new Form2(); następnie już mogę wywołać dane elementy otherForm.Email, otherForm.Server itd.

No ok, możesz się odwoływać, ale bezpośrednio po new Form2(); nie ma to przecież sensu, bo te wartości będą puste.
Jak je pokazujesz to okno? Show()? ShowDialog()? jak je zamykasz? Czy ustawiasz DialogResult pod jakimś przyciskiem i wołasz Close() czy jakoś inaczej?

0

UserControl1 wywołuje poprzez userControl1.Visible =true; taki sposób znalazłem na stacku, w aplikacji to wygląda tak, że po poprzedniej konfiguracji emaila, można użyć przycisku "Wyślij mailem" wtedy pojawiają się elementy z UserControl1/

Okienko z Form2zamykałem po naciśnięciu przycisku "Zapisz".

I już podejrzewam że błąd leży tutaj:
Okno Form2 otwierałem takim sposobem

            Form2 email_config = new Form2();
            email_config.Show();

Myślę, że tutaj leży problem.
UP
Wywnioskowałem, że w głównym okienku wywołuje Form2 email_config = new Form2(); wyświetlam je, uzupełniam "textboxy" a następnie błędnie w UserControl1 tworzę Form2 otherForm = new Form2(); która nie ma nic wspólnego z Form2 email_config = new Form2(); do której zapisuje dane.

1

No to na pewno. Musisz mieć jedną instancję Form2, umieść ją w jakimś polu tej klasy, w której je tworzysz.
No i lepiej chyba użyć ShowDialog() niż Show(), bo to chyba informacje wymagane, bez których nie można ruszyć dalej?

0

@somekind: No tak, zastosuje się do twoich rad, wracam do kombinowania, dzięki wielkie za naprowadzenie, jakbym tego sam nie przepisał nigdy bym na to nie wpadł.

2

Zamiast kombinować debuguj, zrozum i przemyśl. ;)

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