|
You last visited: Today at 03:04
Advertisement
[c#] auf andere Forms/classes zugreifen?
Discussion on [c#] auf andere Forms/classes zugreifen? within the .NET Languages forum part of the Coders Den category.
07/19/2013, 20:39
|
#1
|
elite*gold: 1
Join Date: Nov 2007
Posts: 1,871
Received Thanks: 309
|
[c#] auf andere Forms/classes zugreifen?
Hallo zusammen!
Ich bin gerade an einem Punkt, an dem ich nicht weiterkomme, und zwar bekomme ich es einfach nicht hin, auf verschiedene Forms/classes zuzugreifen.
ich bin generell noch starker anfänger was visual studio betrifft, deswegen kann auch sein, das mein vorhaben so nicht möglich ist/komplett dämlich auf diese weise/.. oder wie auch immer.
Zu meinem problem:
1.) form1 ist mein hauptfenster. dort kann man auf options klicken und eine Options form geht zusätzlich auf. dort hab ich eine combobox mit der man die größe des Form1 fensters verstellen kann. kurzer auszug:
Code:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedItem == resoultion[0])
{
MessageBox.Show("resolution 0!");
}
Also die messageboxen werden angezeigt. jetzt würde ich gerne 2 int variablen definieren mit der höhe und breite der neuen fenstergröße, aber ich hab keine ahnung wie ich diese variablen dann in die form1.designer.cs datei unterbringe.
2.) allgemein habe ich das problem, dass ich auf andere methods usw nicht zugreifen kann. zb. kann ich in program.cs nicht auf eine method aus der definitions.cs zugreifen(beide sind im selben namespace). Bilder:
Hier habe ich zum test einfach mal eine Updatecheck method erstellt, die ausgeführt werden soll, wenn die form1 erstellt wurde. Doch irgendwie kann ich die Updatecheck method nirgendwo anders finden, ich weiß nicht was ich verkehrt mache.
Ich habe auch den using befehl eingebunden und alles public gemacht, aber trotzdem schaffe ich es nicht...
Ich hoffe mir kann jemand helfen!
(falls etwas unklar ist in meiner erklärung, einfach sagen!)
|
|
|
07/19/2013, 21:20
|
#2
|
elite*gold: 46
Join Date: Aug 2010
Posts: 333
Received Thanks: 109
|
zu 1.
die variablen schreibst du nicht in die designer datei!
die gehören in die Form1 klasse
Code:
namespace Client
{
public partial class Form1 : Form
{
//hier die variablen definieren
int ScreenWidth = 1024;
int ScreenHeight = 1024;
public Form1()
{
InitializeComponent();
}
}
}
zu 2.
auf die funktion kannst du ganz einfach zugreifen:
(ein tip: klassennamen immer groß schreiben, sorgt für weniger verwirrung bei der namensgebung)
Code:
definitions.UpdateCheck();
(Klasse.methodenName();)
|
|
|
07/19/2013, 21:35
|
#3
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
sonst ne referenz beim erstellen der weiteren klassen übergeben und diese nutzen
|
|
|
07/20/2013, 00:27
|
#4
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
^was soll die Kacke? Das ist dann doch gegen jede vernünftige Konvention? :<
Mach es wie tolio es gesagt hat, übergibt ne Referenz in nem eigenen Konstruktor:
public Form2(Form1 parentForm)
{
/* stuff */
}
Schau dir am Besten mal die objektorientierte Programmierung an. Nein, statische Methoden sind keine kluge Idee für sowas, nein public Variablen sind keine kluge Idee für sowas. :<
|
|
|
07/20/2013, 01:11
|
#5
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Quote:
Originally Posted by f1Nn
Ich glaube du hast sein Problem überhaupt nicht verstanden und an deinen C# Skills zweifel ich auch nachdem was ich gelesen habe.
Er möchte auf einzelne Methoden zugreifen, keiner hat gesagt, dass diese Zugriff auf die Hauptform (Form1) brauchen. Er möchte eine ganz einfache zweite Klasse haben wo er Methoden unterbringen kann für mehr Ordnung, nicht mehr und nicht weniger.
Statische Methoden sind keine kluge Idee für sowas? Sicherlich, wo hast du denn coden gelernt und wer ffs redet von public Variablen, zumal diese auch keinen Zugriff von anderen internen Klassen erlauben, sondern nur dass man sie out-of-process ausführen kann. Da hat jemand ganz C#/oop nicht verstanden. Back2school :/
|
Tatsächlich sind meine C#-Skills nicht mit denen anderer Member hier vergleichbar, aber das müssen sie auch gar nicht sein - Java in einer weltweit tätigen Firma reicht, um bestimmte Prinzipien zu begreifen.
Ich zitiere das gerne mal für dich:
Quote:
|
Also die messageboxen werden angezeigt. jetzt würde ich gerne 2 int variablen definieren mit der höhe und breite der neuen fenstergröße, aber ich hab keine ahnung wie ich diese variablen dann in die form1.designer.cs datei unterbringe.
|
Für mich liest sich da mehr als deutlich heraus, dass der TE einen Callback an seine eigentliche Form schicken will, sodass sich Höhe und Breite ändern. Wenn du das über eine statische Methode machst, wird dein Code ziemlich wahrscheinlich ziemlich ungut sein, spätestens bei 2 Instanzen von Form1 hast du Pech gehabt.
Textverständnis und aufmerksames Lesen helfen einiges. Der TE selbst schreibt, dass er ein Anfänger ist, da gehe ich davon aus, dass er sich einfach noch nicht damit so auseinandergesetzt hat.
Und genau dann sind die statischen Methoden keine kluge Idee und das mit dem public war nur eine kleine Addition, da hier sehr gerne mangelhaft gelerntes VB und C# gelehrt wird. Getter und Setter sind hier das Zauberwort, die man, oh Wunder! in der OOP hört. Datenkapselung, falls du das Stichwort hören willst. Ich kann dir jetzt auch was über ADT erzählen, aber wir sind hier in keiner Vorlesung.
Wenn du weiter drüber diskutieren willst, kannst du dich per PN melden, das driftet dann doch zu sehr vom Thema ab.
|
|
|
07/21/2013, 01:35
|
#6
|
elite*gold: 1
Join Date: Nov 2007
Posts: 1,871
Received Thanks: 309
|
erstmal Danke für die zahlreichen antworten, thanks wurden verteilt! 
hat ein bisschen länger gedauert das antworten, da ich letzte nacht noch lange dran gearbeitet habe und die probleme mit hilfe euer tipps zu zu lösen.
Ich habe meinen Post mal ein wenig gegliedert:
Antworten:
Quote:
Originally Posted by johhnyxD
zu 1.
die variablen schreibst du nicht in die designer datei!
|
Danke für den Hinweis, habe es abgeändert!
Quote:
Originally Posted by johhnyxD
zu 2.
auf die funktion kannst du ganz einfach zugreifen:
(ein tip: klassennamen immer groß schreiben, sorgt für weniger verwirrung bei der namensgebung)
Code:
definitions.UpdateCheck();
(Klasse.methodenName();)
|
ja, so hätte ich es auch gemacht. nur mein problem war, dass sich die updatecheck methode nicht finden lies.
Quote:
Originally Posted by tolio
sonst ne referenz beim erstellen der weiteren klassen übergeben und diese nutzen
|
du meinst zb. einen string weitergeben wie bei einer normalen methode?
ansonsten weiß ich nicht genau was du damit meinst.
Quote:
Originally Posted by f1Nn
2. Nutze statische Funktionen. Beispiel:
Form1.cs:
Code:
void Test() {
Definitions.DasIstEineFunktion();
MessageBox.Show(Definitions.DasIstEinString);
}
Definitions.cs:
Code:
internal static string DasIstEinString { get "Hallo"; set }
internal static void DasIstEineFunktion() {
//Whatever
}
Wenn du fragen hast, kannst du mich auch gerne in Skype adden, siehe links :-)
|
Vielen dank für den tipp! habe jetzt meine updatecheck methode mit static ergänzt und jetzt lässt sie sich aufrufen!
Auf das angebot mit skype werde ich bestimmt nocht zurückkommen!
Quote:
Originally Posted by snow911
Mach es wie tolio es gesagt hat, übergibt ne Referenz in nem eigenen Konstruktor:
public Form2(Form1 parentForm)
{
/* stuff */
}
Schau dir am Besten mal die objektorientierte Programmierung an. Nein, statische Methoden sind keine kluge Idee für sowas, nein public Variablen sind keine kluge Idee für sowas. :<
|
Also die idee mit der parentForm klang für mich ganz interessant, leider hat es bei mir nicht ganz so hingehauen, wie bei dir. in meinen options-form-constructor habe ich form1 parentForm reingeschrieben, dann gabs bei mir aber probleme beim aufrufen der Options form, es musste was in die klammer, aber ich wusste nicht was..
Code:
Options O = new Options();
naja schlussendlich habe ich es folgendermaßen geschafft:
- ich habe bei form1 IsMdiContainer = true; gesetzt
- bei dem aufrufen des "options" fensters:
Code:
private void BtnOptions_Click(object sender, EventArgs e)
{
Options O = new Options();
O.MdiParent = this;
O.Show();
}
- dann konnte ich in der options form einfach parentform.clientsize(..) aufrufen und es wurde geändert.
Ich weiß zwar nicht ob es der beste weg war, da die hintergrundfarbe von meiner form1 verschwunden ist, als ich ismdiparent= true gesetzt habe. hg ist zwar nicht so wichtig, aber hat es noch andere nachteile?
Ansonsten hätt ich da noch ne kurze Frage, ich hoffe jemand weiß zufällig die Antwort..
und zwar wollte ich einen einfachen Updater basteln, der bestimmte dateien je nach Version des clienten von einem ftp server zieht. Es funktioniert soweit alles(also das verbinden mit dem server, das auslesen der dateinamen,..), nur dass die dateien am ende nicht im verzeichnis landen..
die dateien liegen bei bplaced.net . kann das sein dass es an denen liegt? also deren ftp server(da linux) nicht mit c# kompatibel sind?
falls es daran nicht liegt, hier der code:
Also der downloadpfad wird in der letzten messagebox richtig angezeigt..
Code:
if (Client.Properties.Settings.Default.Version < intcurrentversion)
{
try
{
for (intclientversion = Client.Properties.Settings.Default.Version + 1; intclientversion <= intcurrentversion; intclientversion++)
{
string download = "ftp://FTPNAME:FTPPW@SVRADRESSE/Update + "/" + Convert.ToString(intclientversion);
FtpWebRequest request = FtpWebRequest.Create(download) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.ListDirectory;
MessageBox.Show("Jetzt ist gerade das verzeichnis: " + download + "<<<<<< angesteuert!");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = true;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
List<string> files = new List<string>();
StreamReader reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
{
Application.DoEvents();
files.Add(reader.ReadLine());
}
reader.Close();
string s = String.Join(",", files);
MessageBox.Show("Alle Dateien in dem verzeichnis: " + download + "<<<<<sind folgende: " + s);
foreach (string dlfile in files)
{
if (dlfile == "." || dlfile == "..")
{
MessageBox.Show("download wird nicht ausgeführt, da dlfile= " + dlfile + " ist.");
}
else
{
FtpWebRequest request2 = FtpWebRequest.Create(download + "/" + dlfile) as FtpWebRequest;
request2.Method = WebRequestMethods.Ftp.DownloadFile;
MessageBox.Show("Der fertige string der den Download angibt ist dieser hier: " + download + "/" + dlfile);
}
}
}
}
catch (Exception e1)
{ MessageBox.Show(""+e1); }
}
|
|
|
07/21/2013, 01:40
|
#7
|
elite*gold: 0
Join Date: Jul 2013
Posts: 13
Received Thanks: 3
|
Request = Anfrage
Response = Antwort
Von einem Response ist aber bei deiner zweiten Anfrage(=request2) nichts zu sehen
|
|
|
07/21/2013, 02:03
|
#8
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Yep, soweit ich das verstanden habe, musst du noch request2.GetResponse() aufrufen, um die Antwort des Servers zu erhalten.
Options O = new Options(); -> hier muss die this-Referenz rein, da du ja im Konstruktor angegeben hast, dass du ein Argument vom Typ Form1 (= this) übergibst. 
Dann kannst du auch die Funktionen der Instanz aufrufen - das ist vor allem dann praktisch, wenn du z.B. mehrere Forms hast, die dein Option-Dings aufrufen, so kannst du individuelle Einstellungen (in dem Falle fürs Resizen) vergeben.
Zum Thema Mdi kann ich nichts sagen, aber so kannst du deine Hintergrundfarbe wiederherstellen:  (bei Beispiele).
|
|
|
07/21/2013, 05:23
|
#9
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
die updates via ftp runterladen? am besten für alle zeiten vergessen, die zugangsdaten wären dann in jedem programm enthalten => selbstmord
also einfach per http runterladen und passt
|
|
|
07/23/2013, 00:01
|
#10
|
elite*gold: 37
Join Date: Apr 2004
Posts: 2,154
Received Thanks: 250
|
keine beleidigung, aber das hier ist für anfänger wirklich hilfreich
|
|
|
07/23/2013, 09:19
|
#11
|
elite*gold: 5
Join Date: Mar 2008
Posts: 460
Received Thanks: 436
|
@f1Nn
Ich weiß nicht was du hier zusuchen hast und warum du Leute die wesentlich mehr Ahnung haben als unfähig bezeichnest..
Es ist ein absolutes NOGO ! so in einem .Net Programm auf einen Server zuzugreifen. Wie tolio schon schrieb.
@Threadersteller
"Nicht alles was glänzt ist Gold!" -> Nicht alles was dir hier erzählt wird und bei dir auf anhieb klappt ist eine GUTE Lösung.
Es ist natürlich schwer voneinander zu unterscheiden, gerade am Anfang. Vorallem wenn die "vermeidlich" schlechtere Lösung besser bei dir klappt wie die eigentlich RICHTIGE Lösung.
|
|
|
07/23/2013, 17:24
|
#12
|
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
|
Man kann sich auch einen FTP User anlegen, der nur Leserechte erhält  Bitte nehmt bei solchen Anfängerfragen doch nicht alles so ernst und bleibt beim Thema.
|
|
|
07/23/2013, 17:32
|
#13
|
elite*gold: 2932
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
|
Quote:
Originally Posted by Lawliet!
Man kann sich auch einen FTP User anlegen, der nur Leserechte erhält  Bitte nehmt bei solchen Anfängerfragen doch nicht alles so ernst und bleibt beim Thema.
|
|
|
|
 |
Similar Threads
|
andere auf server zugreifen
03/25/2011 - Metin2 Private Server - 5 Replies
hey com,
ich habe mir einen neuen metin2 hamachi P-Server erstellt und ich würde es gerne so ienstellen dass ein freund von mir auch auf meine datenbank connecten kann und ich hab kkeine ahnung wie das geht -.-
es währe nett wenn mir jemand eine genaue anleitung machen oder geben könnte
MfG Felli
|
Mit VB auf andere EXE zugreifen wie?
01/14/2011 - .NET Languages - 6 Replies
Ist es mit der Visual Basic 2008 Expr.Edition möglich mit einem in VB
geschriebenen Programm auf ein anderes zugreifen(Auch mit VB gemacht)
Also ich hab zb ein spiel mit vb gemacht und will nen hack dafür...
Falls ja schreibt bitte den Code rein :)
|
[HowTo]Andere Pc´s auf DB zugreifen lassen
09/23/2010 - Metin2 PServer Guides & Strategies - 30 Replies
Hey,
da ebend 2x gefragt wurde wie man das macht mache ich hier kurz ein TuT.
Also los gehts!
1.Ihr Öffnet die Portmap
2.Ihr geht auf das weiße Blatt oben Links
3.Dann füllt ihr das so aus
http://img842.imageshack.us/img842/9687/portmap.p ng
4. unten den ersten Button klicken und Fertig ist es :D
|
mit navicat und filezilla auf andere pserver zugreifen
07/07/2010 - Metin2 Private Server - 11 Replies
Hi
mein freund hat einen pserver und ich wollte auf den server zugreifen mit navicat oder filezilla aber ich bekomm immer einen Fehler, geht das überhaupt und wie?
|
Wie kann ich von mir aus auf eine andere DB zugreifen?
01/30/2010 - Metin2 Private Server - 7 Replies
Ich hab ne Frage wie kann ich von meinem Pc mit Navicat auf einen anderen Pc auf die db mit Navicat zugreifen?
sry das ich des grad net so erklären kann^^
mfg FreaQii
|
All times are GMT +1. The time now is 03:05.
|
|