Natürlich kannst du ein Objekt in einer if-Abfrage instanzieren.
Du musst nur bedenken, dass es dann sein kann, dass das Objekt dann nicht existiert, wenn du irgendwo anders darauf zugreifen willst.
Zum Beispiel bei dir ist das bei
if ((flanke == true) && (matrix[row, column] == "0")) // Negative Flanke
{
status = float.TryParse(timestamp[column].Substring(11, 2), out hours);
status = float.TryParse(timestamp[column].Substring(14, 2), out minutes);
status = float.TryParse(timestamp[column].Substring(17, 2), out seconds);
status = float.TryParse(timestamp[column].Substring(20, 6), out mseconds);
time = hours * 3600 + minutes * 60 + seconds + mseconds / 1000000; // Prozessdauer kalkulieren
process.Endtime = time - nullTime; // Endzeitpunkt in Objekt schreiben
process.Duration = process.Endtime - process.Starttime; // Prozessdauer in Objekt schreiben
flanke = false;
}
das Objekt überhaupt nicht existiert.
Also musst du das abfangen.
if(process != null)
{
process.Endtime = time - nullTime; // Endzeitpunkt in Objekt schreiben
process.Duration = process.Endtime - process.Starttime; // Prozessdauer in Objekt schreiben
}
Oder was hast du nun für Fehlermeldungen
Flo
Hi Beren,
du hast das Objekt process in der in der if-abfrage
if ((flanke==false) && (matrix[row, column]=="1")) // Positive Flanke
deklariert.
Deshalb ist es sie an der Stelle, an der du auf sie zugreifen willst nicht bekannt.
Du müsstest sie bei
if ((flanke == false) && (matrix[row, column] == "1") || (flanke==true) && (matrix[row, column]=="0"))
deklarieren.
mfg Flo
Ok, ich werde dann die Daten wohl per Hand zuweisen.
Danke für die Hilfe.
Mein Problem ist, dass sich ich nicht weiß wo ich das Invoke einsetzen soll.
Meine Programmstruktur sieht ungefähr so aus.
public partial class Form1: Form
{
private Daten myDaten = new Daten();
public Form1()
{
InitializeComponent();
// DataBindings anlegen
this.textBox1.DataBindings.Add("Text",myDaten.DieDaten,"Spaltenname")
}
private void button1_Click(object sender, EventArgs e)
{
new System.Threading.Thread(new System.Threading.ThreadStart(myDaten.DatenLaden)).Start();
}
}
public class Daten
{
DataSet _myDataset;
public Daten()
{
myDataSet = new DataSet();
// Das DataSet initialisieren (Tabellen hinzufügen)
}
public DataSet DieDaten
{
get{return _myDataset; }
set{_myDataset = value;}
}
public void DatenLaden()
{
// Laden die Daten und schreibe sie in das DataSet (dauert einige Zeit)
}
}
Hallo zusammen,
ich habe ein kleines Thread-Problem. In meiner Anwendung habe ich eine Datenqelle (DataSet) an die Text-Eigenschaften von TextBoxen gebunden sind. Da das Laden der Datenquelle einige Zeit in Anspruch nimmt wollte ich das Laden in einen eigenen Thread auslagern. Nun habe ich aber keine Ahnung wie ich das realisieren könnte, ohne dass es kracht ("threadübergreifender Vorgang").
Gibt es bei DataBindings irgendein Event oder eine Methode, um die Aktualisierung mit Invoke wieder im Gui-Thread ausführen zu können?
Oder ist das der falsche Ansatz und ich muss die Daten per hand immer zuweisen?
Vielen Dank
MfG Flo
Dann mach ich so, dass ich der Form das DataSet übergeben, dort die Bindings anlege und beim Schließen das DataSet per Event an die Main-Form zurückgeben.
Flo
Ich habe eine kleine Designfrage.
Ich habe ein DataSet mit einigen DataTables und möchte die dort gespeicherten Daten mit DataBindings an TextBoxen binden und sie so anzeigen und manipulieren können.
Da der Platz der Main-Form nicht ausreicht brauche ich zusätzliche Forms.
Kann ich das so realisieren, dass ich ein neues Form erstelle und deren Textboxen als Eigenschaften implementiere und beim Instanzieren der Form die Bindung an die Daten hinzufüge und beim Schließen wirder lösche, oder ist das schlechter Stil?
Bsp.:
Form2 f2 = new Form2();
f2.TextBox.DataBindings.Add("Text",datatable,"Column");
f2.Show();
mfg Flo
Hallo zusammen,
ich habe ein kleines Designproblem.
Und zwar weiß ich nicht genau, wo ich ich in meiner Anwendung die Eingaben des Benutzer auf ihre Richtigkeit (Datentyp,Länge, etc.) überprüfe.
Mache ich das in der Form im Validating/Validated-Ereignis, lasse ich in der Textbox nur bestimmte Eingaben zu oder überprüfe ich den Wert im dazugehörigen Proberty meiner Datenklasse und löse ein Ereignis aus.
Welche der Möglichkeiten bzw. welche andere ist guter Programmierstil?
Vielen Dank
Mfg Flo
Hab das Problem nun erkannt.
Es lag daran, dass ich das Programm von einem Netzlaufwerk aus zu starten versucht habe.
mfg Flo
Hallo zusammen,
ich rufe von einer DLL mehrere Funktionen auf.
Beim Aufruf bekomme ich eine SecurityException.
Kann das daran liegen, dass ich nicht die alle Rechte auf meinem PC habe (habe keine Adminrechte) oder meckert der Compiler generell wegen dem unsicheren Code?
Was kann ich da tun? Oder wo finde ich was zu dem Thema?
Die Funktionen habe ich so deklariert.
[DllImport(DLL_NAME)]
private static extern byte function();
Vielen Dank
mfg Flo
Eine Xml-Datei hat nur einen DocumentElement Knoten. Du kannst ja prüfen ob der schon vorhanden ist und nur wenn nicht einen erzeugen.
Die Infos dann als Unterknoten des Cocumentelement Knotens erzeugen.
mfg FLO
Ich suche einen kostenlosen Xml Schema Editor.
Hat da jemand eine Empfehlung?
mfg FLO
SQLConnection = Verbindung zur Datenbank
SQLCommand = Stellt die verschiedenen Commands bereit (Insert,Delete,Update)
SQLDataAdapter = Deint zum Transport von Datenbankdaten in ein DataSet bzw DataTable
mfg FLO
Eine neue Zeile kannst du meines Wissens nur in der letzten Zeile einfügen.
Wieso willst du die mittendrin einfügen?
mfg Flo
sry, hab vergessen zu erwähnen, dass du natürlich ein entsprechendes Update-Command-Objekt benötigst.
Wie das auszusehen hat findest du bestimmt im OpenBook.
mfg FLo
myDataAdapter.Update(DataTable);
mfg FLO
Durch das DataBindung wird nur der Eintrag in der enrsprechenden DataTable geändert.
Um diese Änderungen in die Datenbank zu schreiben musst du ein Datenbankupdate per Hand durchführen.
Vorgenhensweise: Datenbanktabelle in DataTable laden, TextBoxen mit Databinding an die DataTable binden, Änderungen machen und dann ein Datenbankupdate durchführen.
mfg flo
In den Defaulteinstellungen ist ein Remote-Zugriff auf die Datenbank nicht erlaubt, du musst den Remote-Zugriff , was wenn ich recht erinnere mit dem SQL Server Management Studio Express bequem geht.
nfg flo
Wenn du eine DataTabel als DataSource eines DataGridViews hast werden die Änderungen die du im DataGridView machst im DataTable übernommen.
Du musst dann nur noch ein DatenBankUpdate machen.
Edit: Link anschauen, da steht alles drin
mfg FLO
Hi Leute,
ich such eine Auflistung der WindowsMessages mit der zugehörigen ID.
Bin schon ne Weile am suchen find aber nichts.
Hat zufällig einer nen Link parat oder weiß wo ich die Info findeß
Mfg FLo
Bekommst du ne Fehlermeldung?
Hast du dir den Link mal angeschaut, ich glaube dir fehlen noch ein paar Basics.
der Select-Befehl muss folgendermaßen aussehen "SELECT * FROM" und dann dewr Name der Tabelle,deren Daten ausgelesen werden sollen.
Dann erzeugst du einen DataAdapter mit dem Select-Befehl und dem Connection-Object als ÜbergabeParamter.
Dann die Tabelle MIt der Fill-Methode (DataTable als Übergabe) füllen und dann sollten die Daten in dem DataTabel stehen.
mfg Flo
Mit einem DataAdapter.
ungefähr so:
string selectbefehl;
selectbefehl = "SELECT * FROM Tabellenname";
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter (selectbefehl ,con);
con.open();
myDataAdapter.Fill(neueTabelle);
con.Close;
schau dir mal das zu dem thema an
Lade die neue Datenbanktabelle in eine DataTable und setze die als DataSource für dein DataGridView.
DataTable neueTabelle = new DataTable();
// Tabelle füllen
myDataGridView.DataSource = neueTabelle;
mfg Flo
form1.WindowState = FormWindowState.Normal;
mfg Flo
Danke für die Antworten.
Da hab ich wieder was gelernt.
mfg FLO
Hi,
ich wollt beim einem eigenen UserControl ein Paar Eigenschaften erst zur Laufzeit setze.
Das wollte ich so lösen.
// Konstruktor
public MeinUserControl()
{
if(!DesignMode)
{
// Eigenschaften setzen
}
}
Visual Studio ruft diesen Code trozdem auf, wenn ich noch am designen bin.
Was einer was da schief geht?
Oder ist diese Eigenschaft für diesen Zweck ungeeignet?
Vielen Dank
Mfg Flo
Hi zusammen,
ich habe fogende Frage.
Gibt es irgendeine Richtlinie, wann main einen Windows.Form.Timer oder einen Threading.Timer verwendet?
Ist es egal welchen man verwendet?
Vielen Dank
mfg Flo
Setz mal den DefaultCellstyle vom DataGridView und nicht den vom RowTemplate .
mfg flo
Mit dem Designer hat das nichts zu tun, das stellt du ja nur den Startwert ein.
Hast du mal das defaultcellstylechange event angemeldet oder den debugger angewendet, um zu sehn ob der neue cellstyle gesetzt wird.
mfg Flo
Hi zusammen,
ich habe eine Frage. Ich habe einen Windowsdienst zur Überwachung eines Gerätes programmiert. Bevor die Überwachung gestartet wird, soll erst noch geprüft werden, ob auch das Gerät initialisiert und bereit ist. Dazu habe ich einen Timer (Threading-Timer) verwendet, indem ich immer wieder das Gerät auf Bereitschaft abfrage, wenn das Gerät dann bereit ist wird der Timer abgrbrochen und die Überwachung gestartet. Aber der Timer beendet sich manchmal irgendwie von alleine, ohne dass er vom Code dazu veranlasst wurde!
Kennt jemand so ein Problem?
Oder weiß mir jemand rat?
mfg Flo
hat sich erledigt
Hättest noch etwas weiter lesen müssen.
unter 25.2.3 Attribute zur Beeinflussung eines Benutzersteuerelements.
mfg Flo
Bei mit klappt das wunderbar. 🙂
Melde mal das DefaultCellStyle Event für dein DataGridView an.
Und lass dir im EventHandler eine MessageBox mit der aktullen Farbe ausgeben.
Oder geh mal mit Breakpoint und dem Debugger durch das Programm.
Vielleicht wird die Farbe irgendwie wieder zurückgesetzt.
mfg Flo
@PW-toXic
public partial class MeineTextBox: TextBox
{
private bool _bToll;
private string _strDeinName;
[Browsable(true)] //Damit man es im Eigenschaftsfenster ändern kann
[Description("Text")] // Die Beschreibung
[Category("Meine Daten")] //Die Kategorie in das die Variable angezeigt wird
public bool Toll
{
get { return this._bToll; }
set { this._bToll= value; }
}
[Browsable(true)]
[Description("Text")]
[Category("Meine Daten")]
public string DeinName
{
get { return this._strDeinName; }
set { this._strDeinName= value; }
}
}
Nomrmalerweise musst das Projekt erst erstellen, bevor das Control in der Toolbox auftaucht.
mfg Flo
und so funktioniert es nicht ?
private void cmdEdit_Click(object sender, EventArgs e)
{
//set all editable
txtContent.ReadOnly = false;
txtDate.ReadOnly = false;
txtTitle.ReadOnly = false;
DataGridViewCellStyle myCellStyle = new DataGridViewCellStyle();
myCellStyle.BackColor = Color.White;
dgvLocations.DefaultCellStyle = myCellStyle;
cmdUpdate.Enabled = true;
cmdEdit.Enabled = false;
}
mfg flo
Wo versuchts du die Farben zu verändern?
mfg FLO
Zum festellen ob Wochenende ist, hätte ich das spontan so gemacht:
if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday
|| DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
{
// :) Wochenende
}
else
{
// :( Arbeit
}
Aber ich glaub nicht, dass du über CultureInfo Informationen bekommst wann in der jeweiligen Kultur Wochende ist, das kannst du nur den Kalender umstellen.
mfg FLo
Schau dir mal die Klasse "DataView" für das Filtern der angezeigten Elemente an, mit der müsste das eigentlich gehn.
mfg FLo
Eigentlich müsste das funktionieren.
Poste mal deinen Code bitte.
Mfg FLo
Noodles hat dir doch geschrieben wie es geht.
"DataBinding"
Mfg FLo
hier ein kleines Beispiel
DataGridViewCellStyle myCellStyle = new DataGridViewCellStyle();
myCellStyle.BackColor = Color.Red;
dataGridView1.DefaultCellStyle = myCellStyle;
mfg Flo
Wenn du sie im Code erzeugst in Verbindung mit einem TableLayoutpanel, sollte die Anzahl eigentlich kein Problem sein.
Mir fällt spontan aber nicht anderes ein wie ich das sonst amchen würde, vieleicht hat ja noch jemand einen Geistesblitz.
mfg flo
Mit
sw.WriteLine(liste);
schreibst du den Namen des Objektes liste in die Datei.
Wenn du die Daten in die Datei schreiben willst, musst du ,wie marsgk schon sagte, die Elemente einzeln in Datei schreiben.
ungefähr so
foreach(string mystring in liste)
{
sw.WriteLine(mystring );
}
da kannst auch jedes Byte in einer TextBox anzeigen lassen und diese an das entsprechnede Array-Element binden.
mfg Flo
Du musst die neue Zeile der Tabelle Hinzufügen!!
DataRow newRow = myTable.NewRow();
// Daten hinzufügen
myTable.Rows.Add(newRow );
mfg flo