Guten Abend,
ich habe eine Windows-Application in C# geschrieben.
Es sollen nun die 3 Variablen txt_pfad, stl_pfad und D von Form1 nach Form3 übergeben werden.
Der Quelltext (Ausschnitte) sieht so aus:
FORM1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace TXT_to_STL
{
public partial class hauptfenster : Form
{
public string stl_pfad;
public string txt_pfad;
public string D;
public hauptfenster()
{
InitializeComponent();
}
private void button_open_Click(object sender, EventArgs e)
{
if (dialog_open.ShowDialog() == DialogResult.OK)
{
if (dialog_open.FileName != null)
{ txt_pfad = dialog_open.FileName; }
}
}
private void button_save_Click(object sender, EventArgs e)
{
if (dialog_save.ShowDialog() == DialogResult.OK)
{
if (dialog_save.FileName != null)
{ stl_pfad = dialog_save.FileName; }
}
}
public void button_ok_Click(object sender, EventArgs e)
{
if (stl_pfad != null & txt_pfad != null &
textfeld_nadel.SelectedIndex != -1)
{
if (textfeld_nadel.SelectedIndex == 0) D = "0.4";
if (textfeld_nadel.SelectedIndex == 1) D = "1.0";
if (textfeld_nadel.SelectedIndex == 2) D = "2.0";
prozessfenster prozess = new prozessfenster();
prozess.ShowDialog();
prozess.proceed();
}
}
}
}
------------------------------------------------
FORM3:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace TXT_to_STL
{
public partial class prozessfenster : Form
{
public prozessfenster()
{
InitializeComponent();
}
public void proceed()
{
hauptfenster haupt = new hauptfenster();
prozessfenster proz = new prozessfenster();
string D = haupt.D;
StreamWriter output = File.CreateText(@haupt.stl_pfad);
output.WriteLine("solid TXT_to_STL");
StreamReader input = File.OpenText(haupt.txt_pfad);
string zeile = input.ReadLine();
while (zeile != null)
{
double x = 0, y = 0, z = 0;
char[] leerzeichen = new char[] { ' ' };
foreach (string zahl in zeile.Split(leerzeichen))
{
x = double.Parse(zahl);
y = double.Parse(zahl);
z = double.Parse(zahl);
}
output.WriteLine(" vertex {0:E} {1:E} {2:E}", x,
y, z);
zeile = input.ReadLine();
}
output.Write("endsolid TXT_to_STL");
input.Close();
output.Close();
}
}
}
Das Übergeben der Variablen funktioniert so nicht. Wie ist hier der richtige Ansatz?
Ich hoffe, ihr seid nicht zu sehr "erschlagen" von meinem Quellcode und könnt helfen.
Vielen Dank schonmal.
Gruß
Thorsten
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
C# ist zwar nicht mein ding, aber
hauptfenster haupt = new hauptfenster();
in proceed() ist mit sicherheit falsch. Damit legst du ein zweites fenster vom besagten typ an, mit eigenen variablen, die am anfang vermutlich leer sind. Was du brauchst, ist das "hauptfenster", welches das "prozessfenster" erzeugt hat. Das könntest du in
public void proceed(hauptfenster haupt){...}
übergeben und dafür dann auf
hauptfenster haupt = new hauptfenster();
verzichten. Damit hättest du nicht ein neues, unabhängiges "hauptfenster", sondern das benutzte.
public void proceed(hauptfenster haupt){
StreamWriter output = File.CreateText(@haupt.stl_pfad);
...
Aufgerufen wird es dann mit
prozess.proceed(#fenster#);//#fenster# steht für die referenz, z.b. Me, self, this, was immer in C# nötig ist
prozessfenster proz = new prozessfenster();
string D = haupt.D;
sind in proceed hingegen vollkommen überflüssig, den der ablauf befindet sich ja schon in einer instanz von "prozessfenster" und eine kopie von D wird auch nicht gebraucht (soweit der code hier diesbezüglich komplett ist).
Da das alles C# betrifft, gibt es aber alles nur ohne gewehr und pistole! :-)
mr.escape