Parameterannahme in Windows Applications (Forms)

sayk

Grünschnabel
Hi,

ich möchte Anwendung-2 aus Anwendung-1 heraus aufrufen. Das ist ja auch kein Problem (System.Diagnostics.Process.Start()); mein Problem ist aber folgendes:

Wie übernehme ich Argumente von Anwendung-1 nach Anwendung-2?

Angenommen, ich mache in Anwendung-1 eine Eingabe in TextBox1, die dann in Anwendung-2 in TextBox2 ausgegeben werden soll...

Ich starte Anwendung-2 mit

using System.Diagnostics;
Process myprocess = new Process();

myprocess.StartInfo.FileName("Anwendung-2.exe");
myprocess.StartInfo.Arguments("ArgumentName") ;
myprocess.Start();

Aber WIE stelle ich die Argumente in der anderen Anwendung in einer Textbox dar?

Ich habe da bestimmt nur ein elementares Verständnisproblem...

Sicher könnt ihr schnell helfen ;D

Sunny Greetz
Dennis [
 
Das ist doch eigentlich einfach:

Code:
static void Main( string[] args ) 
		{
			Application.Run(new Form1());
		}

Und dann nimmst du dir den Parameter aus args[0] raus und speicherst in irgendwo zwischen.
 
Danke, ich dachte es gäbe vielleicht einen einfacheren .NET - Ansatz ;D

Ich habe trotzdem noch ein Problem:

Code:
class MyWinApp
{

  /// ...
  ///...
  
  static void Main(string[] args) 
  {
    parameter = args[0];
    Application.Run(new Form1());
  }

string[] parameter;
}

Die Fehlermeldungen des Compilers:

1.) An object reference is required for the nonstatic field, method, or property 'WindowsApplication7.Form1.parameter'

2.) Cannot implicitly convert type 'string' to 'string[]'

Wo muss ich parameter denn definieren, damit 1) nicht bemängelt wird
Und was mache ich wegen 2) falsch?
 
Tja zu 2.:
sieht verdächtig danach aus, als hättest du die Variable parameter als string definiert. Die Argumentenliste ist aber ein string Array (string []);

Und zu 1.:
Du musst die Variable global definieren, also ausserhalb jeder Methode.
Code:
class Form1
{
   string[] parameter = null;
   // ......

   public static void Main(string[] args)
   {
      this.parameter = args;
      Application.Run(new Form1());
   }
}
 
Danke für die schnelle Antwort.

Leider führt Dein Code zu folgender Compilermeldung:

Keyword this is not valid in a static property, static method, or static field initializer

Damit ist "this." gemeint ....

...ich habe "parameter" natürlich deklariert wie du geschrieben hast. Was ist denn nun das Problem (Sorry, bin Sprachwissenschaftler und kein Programmierer. Wenn die Fragen zu blöd werden, beschwert euch *g*)

Herzliche Grüße

Dennis
 
Aus einer statischen Methode kann (bzw. sollte) man nicht über den this-Zeiger auf Instanzvariablen der Klasse zugreifen.

Code:
class Form1
{
   private static string[] parameter = null;
   // ......

   public static void Main(string[] args)
   {
      parameter = args;
      Application.Run(new Form1());
   }

    public static string[] Parameter {
        get { return parameter; }
    }
}

Später kannst du dann über Form1.Parameter auf das Array zugreifen.

Übrigens halte ich es nicht für besonders geschickt, die Main-Methode in eine Formular-Klasse zu legen, aber das ist vermutlich Geschmackssache.
 
Sorry mein Fehler, da hab ich nicht aufgepasst.

Also VS legt per default die Main Methode in die Form Klasse und das ist auch OK, solange das Programm nicht zu groß wird.
 
Folgender Code wird zwar kompiliert, aber in textBox1.Text erscheint "System.String[]". Kann mir jemand erklären, wieso? Irgendwie werde ich verfolgt von blöden Fehlern (oder meiner eigenen Blödheit)

Code:
public class Form1
{

  private static string[] parameterName = null; 

  public static void Main(string[] args) 
  {
    parameterName = args; 
    Application.Run(new Form1());				
  }

  public static string[] GetName
  {
    get  { return parameterName; }			
  }


  private void button1_Click(object sender, System.EventArgs e)
  {
    textBox1.Text = GetName.ToString();			
  }

}

Das .ToString() hinter GetName erscheint mir selber unlogisch ... aber anders heisst es dann, dass der Compiler "den Typ string[] nicht implizit nach string konvertieren kann" ... gebt mir nochmal nen kleinen Hint, bitte ;D
 
Zuletzt bearbeitet:
GetName gibt ein Array von String-Variablen zurück (string[]), aber als Inhalt für eine TextBox kannst du nur einzelne Strings zuweisen.
 
Das heißt du musst das string Array durchlaufen und die strings einzeln ausgeben:

Code:
foreach(string str in GetName)
{
   textBox1.Text += str + " ";
}
 
Zurück