Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[WinForms] Inhalt der Textbox in anderer Klasse verarbeiten.
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

[WinForms] Inhalt der Textbox in anderer Klasse verarbeiten.

beantworten | zitieren | melden

Hallo,

ich absolviere gerade ein Praktikum und soll für meinen betrieb ein kleines Logistikprogramm schreiben. Leider bin ich "mal wieder :D" ein Neuling in C#.

Ich habe schon super viel gegooglet und auch dieses Forum durchsucht, habe auch ein paar hilfreiche Informationen gefunden, da es diese Themen schon zu genüge gibt. Jedoch komme ich nicht zu einem Abschluss.

Also... Ich habe eine Form und mehrere Klassen(Datenbank.cs , Methoden.cs, usw.)
Über einen Handscanner wird in die Textboxen eine Nummer eingelesen und diese will ich in miener Datenbank.cs speichern/übergeben.

Ich kann auch meine Form instantiieren jedoch kann ich in meiner Datenbank.cs nicht auf die "Textbox.Text" zugreifen bzw auslesen??

Es ist garantiert trivial aber an der stelle fehlt es einfach bei mir.

using System;


namespace LogaScan
{
     public class Datenbank
    {

              
/// <summary>
/// /////////////////////////////////////////////////INSERT INTO//////////////////////////////////////////////////////////////////////
/// </summary>
          public static void Insert()

            {

                LogaScan loga = new LogaScan();
                
               
                String connection_string;
                String commandostring = " ";
                int nsatzzahl;
                DataTable fehlertabelle = new DataTable();
                OleDbCommand _command = new OleDbCommand();
                OleDbConnection _connection = new OleDbConnection();
                String cadetn_pfad =
                connection_string = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source= " + Pfad.cdaten_pfad + "; Extended Properties= dBase III";
                DataTable dt = new DataTable();
                

                string PALETTEN_N_val = "'',";
                string BEZEICHNNG_val = "'',";
                string MSN_val = "'',";
                string VERP_DATUM_val = "'',";
                string PACKSTELLEN_val = "'',";
                string VERP_EINH_val = "'St',";
                string ANZAHL_val = "'',";
                string PERS_NR_val = "'',";
                //int POSITIONEN_val    = 0;
                string POSITIONEN_val_str = "''";

using System;

namespace LogaScan
{
    public partial class LogaScan : Form
    {

        public LogaScan()
        {
            InitializeComponent();
            
        }

       
        public void Packstelle_TextChanged(object sender, EventArgs e)
        {

        }

    }// Ende Klasse

}// Ende Namespace
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Martin877 am .
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo Martin877,

kannst du bitte nur die relevanten Codestellen posten? Lass uns doch bitte nicht deinen kompletten Quellcode nachschauen. (Du hast 2x "Alles Markieren" und "Copy/Paste" gedrückt. Das reicht nicht als Eigeninitiative) Hilf uns ein wenig dir zu helfen.

Beachte auch [Artikelserie] SQL: Parameter von Befehlen

Und damit du die Stelle findest, wo es nicht stimmt:

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Wenn du in deiner Datenbank.cs etwas von woanders übernehmen willst, musst dus einfach übergeben. Als Parameter beispielsweise. Ich weiss nicht, wos hängt, aber du machst in dem Drucken-Click einen (auskommentierten) Aufruf der Datenbank. Einfach mitgeben, was du mitgeben magst.

Lies dir nochmal den Unterschied zwischen "normalen" Objekten und static-an.
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Hey,

die Datenbankabfrage sowie Insertt funktionieren mit meinem Pseudonymen.
Aber jetzt will ich die richtigen Werte aus der Textbox übergeben.

Mein Problem liegt darin, dass ich in der Datenbank.cs meine Form(Logascan) mit

LogaScan loga = new LogaScan();  
instantiiere jdeoch trotzdem nicht auf eine Textbox der Form zugreifen kann.

Heißt ich bekomme keine Fehlermeldung.. sondern weiss einfach nicht wie ich direkt an die Daten aus der Textbox komme.

Danke
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Wenn deine Textbox nicht public ist, dann kann das auch nicht funktionieren.

Wie gesagt: Geh den anderen Weg. Wenn du willst, dass du etwas in die DB einträgst, gib der Methode zum Eintragen mit, was sie eintragen soll.

Gib deiner DB-Methode einen Parameter und gib den Text der Textbox mit.
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Habe alle meine Textboxen auf Public gesetzt.

Bsp.:

 public void Packstelle_TextChanged(object sender, EventArgs e)
        {

        }

Und das "Drucken-Click" war vorerst nur zum Test und hat mit der Datenbank nichts mehr zu tun.
Habe es doch in der Art schon gesehen, dass von einer anderen Klasse auf die Textbox zugegriffen wird und dies auch schon alles versucht.

Dafür habe ich mir meine Datenbank auch geschrieben, dass ich an die bestimmten zugewiesenen Felder die Textboxen übergeben kann.
private Nachricht | Beiträge des Benutzers
Rioma
myCSharp.de - Member



Dabei seit:
Beiträge: 228

beantworten | zitieren | melden

Dein Codeausschnitt zeigt keine Textbox, sondern ein Event einer Textbox. Coffeebean hat dir schon gesagt, wie du es lösen solltest.

Deine Datenbank klasse sollte die Form nicht kennen müssen und auch nicht die Textbox. Die Kommunikation sollte anders herum funktionieren.

Erstelle dir eine Form mit deiner Textbox und zum Beispiel einem Button. In dem Button_Click Event (doppelt auf den Button klicken im WYSIWY-Editor) übergibst du dann den Wert der Textbox an die Datenbank klasse.


public class Datenbank
{

      public void Insert(string textboxvalueausderform){
           //Insert mit Value
      }
}
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Und die ganzen leeren Eventhandler solltest du zum besseren Verständnis und zur besseren Übersicht entfernen.
Z.B.

public void Packstelle_TextChanged(object sender, EventArgs e)
{

}
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

OK, ich bedanke mich erstmal und melde mich, wie ich vorangekommen bin
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Hey,

hoffe nicht, dass ich mir euren Unmut auf mich ziehe aber bekomme es nicht hin.
Euren Ansatz verstehe ich schon aber bekomme es einfach nicht hin ihn umzusetzen.

nochmal zum Verständnis... ich Habe meine Datenbank.cs in der ich mit folgenden Feldern meine DBF füllen will:


                string PALETTEN_N_val = "'',";
                string BEZEICHNNG_val = "'',";
                string MSN_val = "'',";
                string VERP_DATUM_val = "'',";
                string PACKSTELLEN_val = "'',";
                string VERP_EINH_val = "'St',";
                string ANZAHL_val = "'',";
                string PERS_NR_val = "'',";
                //int POSITIONEN_val    = 0;
                string POSITIONEN_val_str = "''";

dazu habe ich meinen Commandostring und meinen Feldtext


 cfeldtext = PALETTEN_N_val + BEZEICHNNG_val + MSN_val + VERP_DATUM_val + PACKSTELLEN_val + VERP_EINH_val + ANZAHL_val + PERS_NR_val + POSITIONEN_val_str;
                        
commandostring = "insert into " + Pfad.cfullfile + " (PALETTEN_N,BEZEICHNG,MSN,VERP_DATUM,PACKSTELLE,VERP_EINH,ANZAHL,PERS_NR,POSITIONEN) values (" + cfeldtext + ");";

und in meiner Form habe ich verschiedene TextBoxen die mir Informationen ausgeben, die ich in die jeweiligen Felder alle gleichzeitig eintragen möchte(pro TextBox ein Feld)

Den Datenbank.insert(), den ich bis jetzt auf den Button gelegt habe soll einmal verschwinden und alles nur noch mit einem Tastendruck auf dem Handscanner erfolgen.


habe mir wirklich noch einiges im Netz durchgelesen aber komme wie gesagt einfach nicht zur richtigen Lösung

grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Martin877 am .
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Was bekommst du nicht hin? Wo hakts? Fehlermeldung? "Ich bekomms nicht hin" ist keine Fehlermeldung;-) Bitte beachte meinen schon geposteten Link

[Artikelserie] SQL: Parameter von Befehlen
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Deinen Link habe ich mir durchgelesen.

Was ich nicht hinbekomme ist es, den Inhalt der Textboxen richtig an meine Felder Der Datenbank.cs zu übergeben bzw. zuzuweisen.

Da in meiner Form beispielsweise Die MSN-Nummer aus der TextBox:

MSN_Anzeiger

kommt.


und in die Klasse der Datenbank in das Feld

string MSN_val = "'',";

gespeichert werden soll.
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 251
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

z.B. sowas?



Datenbank db = new Datenbank();
db.Property = "Foo";
//oder
var FooParameter = "Foo"; 
db.MachDas(FooParameter);

Dann würde ich dir [FAQ] Wie finde ich den Einstieg in C#? empfehlen


Ansonsten brauchen wir evtl. eine genauere Erklärung, wo es hakt und was du schon so getrieben hast.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jamikus am .
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

was wir meinen ist Folgendes: Deine Datenbank soll sich nicht für die Form oder gar die Textbox interessieren - darf diese gar nicht erst kennen - und muss dieses auch nicht. Beispiel für den msnVal:


public class LogaScan : Form
{
	Textbox textbox_MSN_Val;
	Button speichernButton;
	
	// .. Textbox und Button sind ja schon initialisiert bei dir
	
	// Du möchtest wohl automatisch speichern, sobald sich der Text ändert? Dann so:
	public void Packstelle_TextChanged(object sender, EventArgs e)
	{
		Datenbank.Insert(textbox_MSN_Val.Text);
	}	
}

public class Datenbank
{
	public static void Insert(string msnVal)
	{
		LogaScan loga = new LogaScan();

		// ...
		string MSN_val = msnVal; // hier hast du dann den Wert aus der Textbox
		// ...
	}
}

Und wenn du es ordentlich machst - was du solltest - dann überleg dir, ob du nicht lieber eine Klasse erstellt, die die Informationen, die in den ganzen Textboxen & Co stehen speichert - und die du dann nur noch als einen einzigen Parameter an die Insert-Methode übergeben musst.

LG
private Nachricht | Beiträge des Benutzers
Toxo
myCSharp.de - Member



Dabei seit:
Beiträge: 66

beantworten | zitieren | melden

Zitat
Deinen Link habe ich mir durchgelesen. smile
und was hast du daraufhin geändert?
Ich hoffe doch, dass du die Datentypen angepasst hast und VERP_DATUM_val jetzt ein DateTime ist oder es sich bei ANZAHL_val um einen Integer handelt? Wenn nicht wird es lustig wenn mal jemand auf die Idee kommt und in eine deiner Textboxen DROP TABLE Tabellenname schreibt.
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

großen Dank

das verstehe ich soweit

jedoch bekomme ich jetzt eine Fehlermeldung:

Der Aufruf unterscheidet nicht eindeutig zwischen folgenden Methoden und Eigenschaften: "LogaScan.Datenbank.Insert(string)" und "LogaScan.Datenbank.Insert(string)"

  Datenbank.Insert(MSN_Anzeiger.Text);

So wie ich im Forum gelsen habe liegt es wohl an einer nicht eindeutigen Datentypen konvertierung und liegt wohl hieran.

public void Insert(string msnVal)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16148

beantworten | zitieren | melden

Dann les Dir doch mal die Fehlermeldung durch und schau die Methoden an.
Da kann man doch ein bisschen überlegen und erkennen, was der Fehler ist. Ist doch sehr eindeutig diese Meldung....

Grundlagen schön und gut, aber alles vorkauen müssen wir dann auch nicht.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Stimmt das war ein ziemlich trivialer Fehler von mir
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Zitat von Taipi88
Und wenn du es ordentlich machst - was du solltest - dann überleg dir, ob du nicht lieber eine Klasse erstellt, die die Informationen, die in den ganzen Textboxen & Co stehen speichert - und die du dann nur noch als einen einzigen Parameter an die Insert-Methode übergeben musst.


Habe es versucht mit deinem Vorgehen umzusetzten.


        public class LogaScan : Form
{
        Textbox textbox_MSN_Anzeiger;

        public void Packstelle_TextChanged(object sender, EventArgs e)
        {
            Datenbank.Insert(MSN_Anzeiger.Text);
        }
       //.....
}


public static void Insert(string MSN_val)

            {
                LogaScan loga = new LogaScan();

                 string MSN_Anzeiger.Text = MSN_val ;
             //......
            }
leider ohne Erfolg

mir wird der:

 MSN_Anzeiger.Text 


gar nicht in der IntelliSense-Vervollständigungsliste angezeigt.

Ich weiss das meine Anliegen hier im Forum eigentlich nichts zu suchen haben, da es nicht für Anfänger vorgesehen ist aber mir bleibt in dem Fall keine Andere Möglichkeit.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Martin877 am .

Moderationshinweis von Coffeebean (20.10.2015 - 12:58:53):

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 2.3

private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Wieso versuchst du denn den Text wieder auf deine Box zu werfen?

string MSN_Anzeiger.Text = MSN_val ;

Die Methode sagt "Insert" und nimmt einen string. Jetzt musst du den einfach nur noch in die DB einfügen. Taipi88 hats dir sogar gezeigt. Und beachte seinen Hinweis, dass du besser eine Klasse statt einem String machst. Und die dann übergibst. Und daraus dann die Parameter abfüllst bzw. dein Insert zusammenbaust.
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hallo Martin,

entschuldige - aber das ist jetzt echt nicht mehr ausreichend - du hast nicht einmal korrekt abgeschrieben.

LG
private Nachricht | Beiträge des Benutzers
Martin877
myCSharp.de - Member



Dabei seit:
Beiträge: 16
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Sorry.. hatte da was erheblich durcheinander gebracht. auf alle fälle habe ich jetzt den Ablauf verstanden

vielen Dank an euch

p.s. es funktioniert jetzt
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Martin877 am .
private Nachricht | Beiträge des Benutzers