Hallo,
ich habe einen ähnlichen Wunsch. Beim Starten meiner Anwendung(MainForm) öffnet sich ein zweites Form(SecondForm) was die Initialisierungschritte anzeigt. Im Mainform laufen in der Zeit die besagten Initialisierungsschritte ab. Der Benutzer soll in dieer Zeit eigentlich nur das 2. Form(SecomForm) im Focus haben, das Mainform soll "gesperrt" werden. Aber nicht Enable=false. ShowDialog löst dieses Problem, aber nicht zufriedenstellend, da dieser Befehl ja die weiteren Prozeduren im Mainframe blockieren, bis man das Secondframe beendet...Ich möchte also "ShowDialog" ohne diesen Wartezyklus...
Ist dies möglich?
System.Type SenderType = sender.GetType();
// was soll hier genau hin???
object SelectedBox; //sowas?
if (SenderType.Name == "RadioButton")
{
RadioButton SelectedBox = sender as RadioButton;
}
else if (SenderType.Name == "CheckBox")
{
CheckBox SelectedBox = sender as CheckBox;
}
Control[] control = this.Controls.Find("txtDataConfig00", true);
if (control.Length != 0)
{
Control controlNext = control[0];
spiTxtNameString = controlNext.Name + ",";
if (SelectedBox.Checked == true)
....
das ist klar, möcht ich aber nicht, weil ich ja entweder einen RadioButton habe, oder eine checkedBox(unter construction)...also muss ich dies mit einer If-Then anweisung abfragen...du verstehst
System.Type SenderType = sender.GetType();
if (SenderType.Name == "RadioButton")
{
RadioButton SelectedBox = sender as RadioButton;
}
else if (SenderType.Name == "CheckBox")
{
//under construction
}
Control[] control = this.Controls.Find("txtDataConfig00", true);
if (control.Length != 0)
{
Control controlNext = control[0];
spiTxtNameString = controlNext.Name + ",";
if (SelectedBox.Checked == true)
....
bei mir meldet der Compiler immer, das SelectedBox nicht deklariert/vorhanden ist...wenn ich oben bei der definition die If-Then anweisung auskommentiere geht es...könnt ihr mir dies erklären
ok es geht, ich hab das "ToString" falsch geschrieben(toString)...sorry für diesen Post(wo kann man eigene Themen eig. Löschen?)
(3+2).toString() ≤ ist sowas möglich?
anstatt:
int x=(3+2)
textField.Text = x.ToString();
möchte ich:
textField.Text = (3+2).ToString();
Ist dies möglich?
Darf ich Fragen wo du die wunderschönen Buttons her hast?
Weil es so schön hier hineinpasst möchte ich auch mal mein Problem beschreiben und hoffe um Unterstützung beziehungsweise Erfahrungsaustausch.
Auch ich nutze den EventHandler:
port.DataReceived += new SerialDataReceivedEventHandler(OnSerialDataRecieved);
Nach mehreren Messungen habe ich nun mitbekommen, dass der Event öfters mal um 100ms Zeitverzögert ausgelöst wird, wenn Daten empfangen werden. Habt ihr ähnliche Erfahrungen?
Wie könnte ich das Problem lösen.
Gruß Chris
Mit List[2] bekomm ich ja {Y,Z}
aber ich hab es heraus gefunden...
List[2].Y = Z (.Y entspircht dabei der 2. Spalte...)
variable List[X]{Y, Z} => wie komm ich an Z ran
ich habe irgendwie keine Möglichkeit gefunden die Variable Z im Listfeld zu selektieren?
Könnt ihr mir weiter helfen?
Danke, Chris
Original von herbivore
Hallo dewebey,ich denke mal mit
TrackBar.SmallChange
TrackBar.LargeChangeherbivore
Kann mir mal jm. die Bedeutung dieser beiden Einstellungen erklären? Ich habe das Problem das ich mit einer Trackbar einen Strom einstellen möchte. Von 0-50A in 100mA(0,1A)schritten.
Erste Annahme: Kommawerte sind mit Trackbar nicht einstellbar, richtig?
Zweite Annahme: In 100-Schritten die Werte Verändern geht so einfach nicht, richtig?
Danke, Chris
wo find ich den weitere Beispiele zum Thema "String to Hex"?
das habe ich schon gefunden, ist aber für mein Projekt nicht passend. Gibt es noch weitere?
Hallo,
ich bin auf der Suche nach einem Designpacket, da die Standardelemente aus der Visual Studio 2005er Version etwas langweilig sind. Gibt es sowas? Habe bei meiner Recherche nix gefunden...
Danke für eure Unterstützung
Chris
ok die 75ms sind Textbox beschreiben & Textboxfarbe ändern.
Ich habe die beiden jeweiligen Befehle via Kommentierung aktiviert bzw. deaktiviert...der Oszi gab mir dann die Bestätigung...mit Kommentaren 25ms, ohne 100ms. Daher die Frage, gibt es einen Befehl nach dem Motto Form.Update=true/false?
Hallo,
ich bins mal wieder 🙂
ich habe ein Formular realisiert, welches mehrere Registerinhalte wiedergibt. Mittels eines Buttons ist die Funktion "Read all register" umgesetzt. Bei der Datenabfrage handelt es sich um einen zugriff auf eine uart-schnittstelle zu. Die Abfrage dauert 13ms pro Register.
Die Abfrage aller Register(25) dauert aber 3 Sekunden. Also benötigt der Rechner rund 100ms arbeitszeit. Nun habe ich nat. nach der Ursache gesucht&festgestellt, dass das schreiben der Registerwerte in die entsprechenden Textboxen 75ms dauert. das ist nat. Ärgerlich, daher möchte ich nach einem Befehl bzw. Option nachfragen, welche das aktualisieren des Formulars deaktiviert & später wieder aktiviert.
Ist dies möglich?
Danke, Chris
Hallo,
ich habe ein Formular mit ziemlich vielen Textboxen. Nun möchte ich nicht für jede einen Event definieren, sondern nach dem Motto
for all Textboxen.changeText += new Event();
ist dies möglich&wenn wie?
Danke Funktioniert super...
Original von peterchen72
Mit this.MaximizeBox = false und this.MinimizeBox = false kann ich ja den Maximieren und Minimieren Button rechts oben unsichtbar machen. Aber wie kann ich den Close-Button (rotes X) unsichtbar machen?Ich breche jetzt einfach im Form_Closing-Event mit e.Cancel = true ab. Ist aber keine saubere Sache.
Mit this.ControlBox = false kann ich zwar die ganze Leiste weg machen, aber das möchte ich nicht.
Reinhard
Hallo
ich habe ein ähnliches Problem. Wenn der Anwender das "X"[Schließen] oben rechts drückt, soll bei mir ein Event ausgelöst werden, um die Daten zu retten. Aber wie heißt dieser Event.
Habe schon:
private void SPICom_Close()
{
//...
}
oder _Closing oder Unload versucht, aber es klappt nicht
Danke
Chris
Original von a957m
Hallo,ob solch ein Verweis immer weiterhilft, halte ich für fraglich ...
Anbei ein kleines Beispiel :
TextBox found = null; foreach (Control c in this.Controls) { if (c is TextBox) { if (c.Name == "textBox1") { found = (TextBox)c; break; } } } found.Text = "Gefunden";
Danke für dein Beispiel. Diesen Ansatz hatte ich auch anfangs realisiert:
foreach (Control controlNext in this.Controls)
//for (int i = 1; i < 200; i++)
{
//controlNext = this.GetNextControl(controlNext, true);
if (controlNext is TextBox)
{
if (controlNext.Name.IndexOf("Data") != -1)
{
if (spiTxtNameString == null)
{
spiTxtNameString = spiTxtNameString + controlNext.Name + ",";
spiTxtAddrString = spiTxtAddrString + controlNext.Name.Substring(controlNext.Name.Length-2) + ",";
}
else
{
if (spiTxtNameString.IndexOf(controlNext.Name) == -1)
{
spiTxtNameString = spiTxtNameString + controlNext.Name + ",";
spiTxtAddrString = spiTxtAddrString + controlNext.Name.Substring(controlNext.Name.Length - 2) + ",";
}
else
{
//i = 200;
break;
}
}
}
}
}
Problem dabei, er selektiert nur Panels und Buttons, aber nicht meine Textboxen aufm FOrmular?! Daher habe ich es mit einer For--Schleife realisiert, und
controlNext = this.GetNextControl(controlNext, true);
damit geht es auch. Besser wäre noch, wenn ich die Anzahl der Elemente wüsste. Gibt es den Befehl?
nach dem Motto: this.Controls.count;
Danke Chris
Hallo,
ich möchte dynamisch nach einer Textbox mit einem bestimmten namen suchen, diese selektieren&beschreiben. Ungefähr so:
foreach this.activecontrol
{
if (this.activecontrol.name = "textbox_x01")
{
this.activecontrol.text=data;
}
else
{
this.activecontrol ++;
}
}
der Syntax ist natürlich in diesem Beispiel falsch. Aber ich glaube ihr versteht mein anliegen. Wie kann ich diese Funktion realisieren?
Danke, Chris
das mit der Ausgabe ist kein Problem (Ansicht => Ausgabe) zeigt mir das im Debug alles wunderbar an...
aber wie gesagt, eigentlich möchte ich nicht "ea" sehen, sondern "data"...und nun verrat mir wie....
@herbivore
ist folgender Gedanke richtig?
// Formular-Klasse
public event TextIOEventHandler TextRawReceived;
private void OnTextRawReceived(string textReceived)
{
if (this.TextRawReceived!=null)
{
this.TextRawReceived(this,new TextIOEventArgs(textReceived));
}
}
// Uart-Klasse
public delegate void TextIOEventHandler(object sender, TextIOEventArgs e);
public class TextIOEventArgs : System.EventArgs
{
private readonly string text;
public TextIOEventArgs(string text) :base()
{
this.text=text;
}
public string Text
{get{return this.text;}}
}
Original von generalpd
Das Problem ist, der Quellcode ist nicht vollständig, da Du nur den ersten Teil der Main-Klasse kopiert hast. Der andere ist in der "Main.Designer.cs"(?)-Datei.Daher meine Frage: Was für einen Compiler-Fehler hast Du?
Ich finde z.B. nichts zu dem "comport" in der serialCommunication-Klasse. Und wo ist das Delegate "SerialDataReceivedEventHandler"?
Fehler bekomm ich aktuell keinen, da der Quellcode so stimmt:
public partial class Main : Form
{
serialCommunication serialcom = new serialCommunication();
public Main()
{
InitializeComponent();
serialcom.comport.DataReceived += new SerialDataReceivedEventHandler(ThisMyEvent);
serialcom.testEvent();
}
public static void ThisMyEvent(Object objSender, EventArgs ea)
{
Console.WriteLine(ea);
}
}
public delegate void MyHandler(string uartStringEvent);
class serialCommunication
{
public event MyHandler MyEvent;
public SerialPort comport = new SerialPort();
//
// hier hab ich das öffnen bzw senden von daten realisiert
// auf diese Funktion kann ich auch super zugreifen, daten übergeben
//
//
protected void OnMyEvent(string uartStringEvent)
{
if (MyEvent != null)
{
MyEvent(uartStringEvent);
}
}
public void testEvent()
{
string data = (comport.ReadExisting());
OnMyEvent(data);
}
}
ich will aber eben statt "Console.WriteLine(ea);" eigentlich "Console.WriteLine(data);" und das klappt eben nicht so einfach...ich weiß nicht wie.
"SerialDataReceivedEventHandler" is doch eigentlich so ein standard-funktion, da kenn ich mich nicht aus. Hab ich nur kopiert...
Original von herbivore
Hallo pgxn84,die Antwort auf deine Frage, steht schon in dem von dir kopierten Thread:
Verwende also eine eigene EventArgs-Klasse, um zusätzliche Parameter zu übergeben.
herbivore
du möchtest hierbei sicher auf das Beispiel vom "Programmierhans " hinweisen.
Ich kapier dieses aber leider überhaupt nicht. Ich versteh auch nicht, warum es so kompliziert ist, aus einer Klasse einen Wert zurück zu bekommen, bzw. eigentlich aus einem Event. Kannst du mir bitte einen kleinen Tipp geben, wo ich in meinem Quelltext ansetzen muss, um dies zu realisieren?
Vielen lieben dank,
Chris
[EDIT]Abgeteilt von Problem mit EventHandler[/EDIT]
Für mein Problem habe ich mich an folgenden Quelltext Orientiert:
Und dies ist mein Quellcode:
public partial class Main : Form
{
serialCommunication serialcom = new serialCommunication();
public Main()
{
InitializeComponent();
serialcom.comport.DataReceived += new SerialDataReceivedEventHandler(ThisMyEvent);
serialcom.testEvent();
}
public static void ThisMyEvent(Object objSender, EventArgs ea)
{
Console.WriteLine(ea);
}
}
public delegate void MyHandler(string uartStringEvent);
class serialCommunication
{
public event MyHandler MyEvent;
protected void OnMyEvent(string uartStringEvent)
{
if (MyEvent != null)
{
MyEvent(uartStringEvent);
}
}
public void testEvent()
{
string data = (comport.ReadExisting());
OnMyEvent(data);
}
}
nun mein Problem: ich bracuhe die Seriellen Daten, sprich "data", aber ich weiß nicht wie...all die Ideen die ich habe bringen einen Compiler-Fehler. Bittekopiert meinen Quellcode und zeigt mir die zu ändernden stellen. Ich bin aktuell ratlos.
Vielen Dank
Chris
Hallo liebe DSharp-User,
ich habe ein winziges Problem und oute mich mal lieber gleich als C#-Newb 🙂
also ich habe ein Formular erstellt...
Dieses Formular realisiert einen zugriff auf eine Serielle Schnittstelle. Damit ich auch von einem anderen Formular einfach auf diese Schnittstelle zugreifen kann, dachte ich mir, schieb ich die ganze Uart-Geschichte in eine eigene Klasse. Ich habe also ein neues Klassenfile uart.cs erstellt.
mittels:
serialCommunication serialcom = new serialCommunication();
und zb.:
serialcom.portopen()
kann ich nun vom Formular direkt auf die Klassenbefehle zugreifen & die Uartschnittstelle konfigurieren. Auch die Werteübergabe ist kein Problem.
Nun les ich den Port natürlich auch mal aus. Dafür gibt es bei mir unter Main(im Formular) den verweis:
serialcom.comport.Datareceived += new serialDataReceivedEventHandler(serialcom_DataReceived);
in dieser Funktion wird der Port ausgelesen. Und den Inhalt möchte ich gern auf meinen Formular wiedergeben. Bloß wie bekomm ich die Daten der Variablen dieser Klasse in mein Formular übermittelt.
Eine Returnanweisung geht nicht, da durch dieses " += new ..." irgendwie rückgabewerte nicht gehen.
Bitte helft mir...
Danke im Voraus, Chris