[C#] katalogowanie nowych form

0

Witam wszystkich, jako iż to 1 post
już przepraszam za denną nazwę tematu ale nie wiem jak to nazwać:)

piszę projekt zaliczeniowy na studia (komunikator internetowy p2p) i napotkałem mały problem tj nie wiem jak (i czy w ogóle) przechowywać informacje o konkretnym oknie -> jaśniej:
każdą rozmowę otwiera w nowym oknie;
na jakimś tam buttonie do rozpoczęcia rozmowy mam

Form2 a = new Form2(this, numer, port);
a.show();

komunikacja z wieloma użytkownikami (UDP) odbywa się na tym samym porcie i wysyła wiadomości do nie tych okienek co trzeba- niestety sprawdzone tylko na 3 komputerach bo tylko tyle ich pod ręką mam
myślałem, żeby te formy "skatalogować" jakoś ale tu jest problem bo nie mam pomysłu jak i czy w ogóle się tak da

Środowisko MS Visual Studio 2008
korzystam z Windows Form Application
z góry dziękuje za pomoc
POZdrawiam*

@e "w ogóle"

1

List<Form2> list = new List<Form2>();

Nie lepiej zrobić new Form2(socket s)?

0

niestety sprawdzone tylko na 3 komputerach bo tylko tyle ich pod ręką mam
Odpal Windows XP pod maszynami wirtualnymi. Będziesz miał 3 kompy + powiedzmy 3 wirtualne. Jest na czym testować :)

0

dziękuje za odzew:)
maszyny wirtualne to nie rozwiązanie ponieważ na virtualpc niezbyt dobrze działa obsługa konkretnych portów (szczególnie wysokich)
co do listy formów to nie jest głupi pomysł nawet:) tylko pytanie czy zadziała - sprawdzę
jeszcze jedno pytanie:
czy istnieje jakiś komponent w win-forms na którym umieszcza się inne komponenty i gdy zmienimy rozmiar forma to one też się powiększają? dla przykładu rozszerzam okno programu i równocześnie rozszerza mi np textboxa?
pozdrawiam

1

Właściwość koltrolek:
control.Dock = DockStyle.Fill; //dostępna również w tabelce properties w VS

Split Container chyba najlepiej, albo zagnieżdżone Split Container'y. Flow Layout i Table Layout też pewnie da radę.

1
janekgrypa napisał(a)

maszyny wirtualne to nie rozwiązanie ponieważ na virtualpc niezbyt dobrze działa obsługa konkretnych portów (szczególnie wysokich)

A VirtualBox albo VMWare Player?

czy istnieje jakiś komponent w win-forms na którym umieszcza się inne komponenty i gdy zmienimy rozmiar forma to one też się powiększają? dla przykładu rozszerzam okno programu i równocześnie rozszerza mi np textboxa?

Do tego nie trzeba żadnego komponentu, wystarczy TextBoxowi odpowiedni Anchor ustawić.

0

dziękuję jakoś sobie z kwestią wizualną poradziłem;)

może się komuś to przyda:
wracając do "katalogowania" to korzystam jednak ze słownika

Dictionary<String, Form2> rozmowy = new Dictionary<String, Form2>();

i potem sprawdzam, czy istnieje już okno z rozmową z konkretnym numerem (np "192.168.1.105") jeżeli tak to wywołuje funkcję w form2

dopisz(string tekst)

w przeciwnym wypadku jeżeli nie istnieje
to tworzy nowe okno i dopisuje do niego; dopisuje też numer do słownika
jeżeli rozmowa się skończy to usuwa dany nr ze słownika

mam jeszcze inne pytanie czy koniecznością jest, żeby do każdej nowej rozmowy tworzyć osobny wątek? czy zaniechanie tego niesie za sobą jakieś negatywne korzyści?
POZdrawiam

0

Dzisiaj doktorek na laboratoriach zadał mi do projektu który mam coś co mnie przeraziło na wstępie
obaj użytkownicy działają w różnych sieciach za NATem proszę zrobić tak, by mogli się porozumiewać;
jak rozmyśliłem sobie ten problem (chyba logicznie) to da się to zrobić lecz mam mały problem: potrzebuje uzyskać zewnętrzne IP z poziomu C# i nie mam bladego pojęcia jak to zrobić:(

            string myHost = System.Net.Dns.GetHostName();
            string myIP = Dns.GetHostByName(myHost).AddressList[0].ToString();

zwraca tylko ip wewnętrzne, a inne elementy tablicy - bzdury;
ma ktoś pomysł jak to rozwiązać bez korzystania z www? jakaś gotowa reguła?

poszperałem w Googlach:)
Udało mi się wyczytać coś takiego:

 string whatIsMyIp = "http://www.whatismyip.com/automation/n09230945.asp";
	            WebClient wc = new WebClient();
	            UTF8Encoding utf8 = new UTF8Encoding();
	            string requestHtml = "";
	            try
	            {
	                requestHtml = utf8.GetString(wc.DownloadData(whatIsMyIp));
                    //tu mam swoj numer
	            }
	            catch (WebException we)
	            {
                     MessageBox.Show("jakis blad");
	            }

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