Hi,
meinst du so etwas wie [FAQ] Assistenten/Wizards: Mit Windows Forms eine Art Frameset einer Website nachbauen?
Ansonsten könntest du auch ein TabControl verwenden, wie in Menu vorlage umsetzen vorgeschlagen.
Hi NiggiBS,
in C# programmiert man nicht wie in C, daher sind deine beiden Tipps hier nicht so sinnvoll.
Erstelle dir für die Zeile ein eigenes UserControl, d.h. Label mit zwei TextBoxen und einem Button.
Nun kannst du dynamisch (wie in der FAQ beschrieben) dieses UserControl in einer Schleife x-mal erzeugen.
Hier 2 Links:
Custom Controls in Visual C# .NET
User Control in C#
Wieso verwendest du dafür DependencyProperties? Benutze MVVM, d.h. erstelle dir ein ViewModel und binde an dessen Eigenschaften.
OK, dann probiere ich es am Wochenende mal aus.
Muss man eigentlich zuerst das Update 1 installieren? VS Community Edition 2015 hat mir gestern abend nur dieses per Notification angeboten, nicht das Update 2.
Und das Update 2 ISO File ist wirklich 7 GB groß (das Original ISO war ja nur ca. 4 GB)???
Ich meine die vom OP im Post zuvor:
timer2.enable = false
Richtigerweise muss es natürlich
timer2.Enabled = false;
lauten.
Seid ihr so schwer von Kapee? 😉
@LaTino: was willst du mir sagen (schwer-von-begriff)?
Setze einfach im Timer_Tick diese Codezeile (vor der MessageBox).
Bei deinem Code müßte auch
port1.Write("<SWITCH_SCREEN,1>" + Environment.NewLine);
funktionieren - nur ist halt WriteLine eleganter zu schreiben (als explizit immer Environment.NewLine anzuhängen).
Packe mal den Aufruf in das Shown-Event der Form.
Mit dem P/Invoke Interop Assistant erstellt:
public partial class NativeMethods {
/// Return Type: unsigned int
///sourceData: unsigned char*
///sourceLength: unsigned int
///destData: unsigned char*
///destLength: unsigned int
[System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint="Compress")]
public static extern uint Compress(System.IntPtr sourceData, uint sourceLength, System.IntPtr destData, uint destLength) ;
}
Bei "<Unknown>" mußt du dann noch den DLL-Namen eintragen (und diese muß dann im Suchpfad liegen - möglichst direkt neben der EXE).
Und mittels der Marshal-Klasse kannst du dann die Daten übertragen. Such dir am besten ein Tutorial zum Marshallen.
Reicht dir einfach ein 3D Chart, wie z.B. 3D Point Chart?
Kannst du wohl auch mit Excel erstellen: 3D scatter plot for MS Excel oder 5dchart.
Du könntest auch einfach die Main Form disablen.
Dann trage doch mal AutoScaleMode.Dpi ein (Handling DPI scaling in your .NET application’s forms).
Oder möchtest du gar keine Größenveränderung? Dann natürlich AutoScaleMode.None.
Mittels der WINAPI-Funktion GetAsyncKeyState läßt sich der Tastenstatus direkt abfragen (ohne Verzögerung).
Packe mal alle Controls auf ein Panel und gib dort eine MinimumSize vor - und entsprechend AutoScroll aktivieren (für Form und/oder Panel).
Ein PictureBox stellt ein Bild dar, d.h. wenn du die Anzeige ändern willst, dann mußt du das Bild beschneiden, nicht die PictureBox.
Hier noch ein anderer Link: How to zoom an image in pictureBox? (ganz unten der funktionierende Code)
Hallo,
du willst also gar nicht die Größe der PictureBox verändern, sondern das enthaltene Bild zoomen, s z.B. Grafik in PictureBox vergrößern
Auf CodeProject gibt es auch eine fertige Komponente dafür: A Zoomable and Scrollable PictureBox
Hi,
lies mal [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls durch.
So wie du List<string> verwendest, kannst du auch einfach eine List<Button> erstellen oder aber mittels OfType(typeof(Button)) bzw. mittels [FAQ] Casten aber richtig: () / is / as gezielt nach den Buttons suchen.
Such mal nach FindWindow und EnumWindows (mittels P/Invoke kannst du diese WinAPI-Funktionen von C# aus ansprechen).
Edit: auch Controls (z.B. Buttons) werden von der WinAPI als Windows angesprochen 8)
Nach
string[] lines = File.ReadAllLines("Test.txt");
hast du in lines.Length die Zeilenanzahl stehen und kannst mit einer Schleife über die letzten Zeilen iterieren.
Die Erklärung ist ganz einfach. Während des Gedrückthaltens der Buttons wird die Message-Loop angehalten, so daß auch keine Forms.Timer mehr laufen.
Kann man z.B. auch bei anderen Programmen beobachten (wie den Browsern, wenn man eine Seite öffnet, welche eine Animation bietet).
Der Systemprozess läuft aber weiter und daher auch die Stopwatch.
@Serun: was willst du denn mit der Stopwatch ermitteln?
Übernimm einfach den Source der beiden Klassen ObjectShredder und CustomLINQtoDataSetMethods in dein Projekt und rufe die Methode CopyToDataTable() dann auf - und wunder dich (dass es funktioniert 😄).
LINQ is magic!
Hast du denn die CopyToDataTable-Methode auch übernommen, so wie in How to: Implement CopyToDataTable<T> Where the Generic Type T Is Not a DataRow beschrieben?
Und was bitte soll die Zeile bewirken?
Vllt. hilft dir Enumerating Windows Portable Devices in C#?
Portable Device Lib sieht ganz hilfreich aus.
stimmt, das ist noch eleganter 👍
Mein Vorschlag bezog sich darauf, daß die Animation weiterlaufen kann.
Die GUI darf sowieso nicht blockieren, s.a. [FAQ] Warum blockiert mein GUI?
nicky hat schon den richtigen Vorschlag bzgl. eines eigenen Events gemacht.
Am besten also das Window (oder Button o.ä) vor dem Aufruf disablen und dann im Event wieder enablen.
Probiere mal einen asynchronen Aufruf:
showAnimation.Completed += (sender, eventArgs) =>
{
Task.Run( () =>
{
Process process = new Process();
process.StartInfo.FileName = filePath;
process.StartInfo.Arguments = "";
process.Start();
process.WaitForExit();
}
};
"Desktop\Computer" ist ja auch kein physikalischer Pfad, sondern nur ein virtueller Ordner.
Du benötigst schon den Laufwerksbuchstaben des Geräts: "X:\Internal Storage\DCIM"
Entweder über eine Konfiguration festlegen oder aber mittels DriveInfo.GetDrives() dem User zur Auswahl geben.
Hi,
z.B. direkt mittels der WinAPI-Funktionen (wie PostMessage), s.a.
SendKeys Problem
SendMessageA
Textboxen eines anderen Programmes füllen
Hi,
nimm mal
bindingSource1.DataSource = flatList;
anstatt der Add-Loop.
Hi,
du mußt einfach eine weitere (inner) Loop erstellen:
foreach (TreeNode s1 in sub1)
{
foreach (TreeNode s2 in s1.Nodes)
{
}
}
Mittels Breakpoints und der Watch-View kannst du doch dann überprüfen, wie der Programmablauf ist und ob die Variablen die erwarteten Werte haben.
In [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls stehen auch noch zusätzliche Tipps, wie man Controls zur Laufzeit (erzeugt und) anspricht.
Aber wenn es um Geschwindigkeit bei einem Algo geht, dann muss man eben Speicher dafür opfern 😁
Hi,
erstelle dir ein Array mit X Einträgen (entsprechend der kleinsten Wahrscheinlichkeit 1/X) und schreibe dann in einer Schleife für jedes Item den Index (des Items) rein. Dies brauchst du nur einmalig zu machen (sofern sich die Wahrscheinlichkeiten nicht ändern).
Dann einfach per Random(0, X) einen Wert raussuchen und den Item-Index an der Stelle aus dem Array auslesen.
Als Beispiel:
Items:
0: 40%
1: 20%
2: 10%
3: 20%
4: 10%
Kleinste Wert ist 10%, also Array mit 10 Einträgen erstellen:
Array:
0: 0
1: 0
2: 0
3: 0
4: 1
5: 1
6: 2
7: 3
8: 3
9: 4
Hi,
dann lass dir doch im Client-Programm vom Server-Programm die Einstellungen geben.
Wie kommunizierst du denn mit dem Server-Programm?
Aber wieso soll das Client-Programm überhaupt die Datenbankeinstellungen des Servers kennen?
Der Sinn einer Client-Server-Architektur ist doch gerade, daß der Server die Aufgaben für die Clients erledigt (z.B. Datenbankabfragen etc.).
Hi,
lies mal [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen (besonders letzteres)
Und wenn du einen Link erstellt hast, dann muss der Pfad natürlich auf ".lnk" enden 8)
Stimmt, der BGW springt automatisch in den GUI Thread
Aber nicht innerhalb der DoWork Eventmethode, sondern nur in den Events ProgressChanged und RunWorkerCompleted - also der Zugriff auf textBoxUSBLabel.Text ist hier falsch.
@Taipi88: du meinst Closure Variable, oder?
Der übliche Use Case ist doch wohl:
if (x.HasValue) // bzw. (x != null)
{
int y = x.Value;
}
else
{
// no value
}
Irgendwie möchte man ja doch an den Wert herankommen, den man dort gesetzt hat. 🤔
Bei Type.GetProperties (bzw. GetProperty etc.) kannst du als Parameter BindingFlags.NonPublic angeben:
Exception e;
var prop = e.GetType().GetProperty("HResult", BindingFlags.NonPublic | BindingFlags.Instance);
int hresult = (int)prop.GetValue();
Ich bin mir nicht sicher, ob und was
... AND (Stadt LIKE '%%')
(bei Eingabe einer leeren Stadt) bei SQL als Ergebnis liefert.
Eventuell müsstest du dynamisch den RowFilter zusammensetzen.
Hi,
das geht ganz einfach mittels DataBinding. Lies dich mal in MVVM (Model View ViewModel) ein.
Du könntest ein (hierarchisches) Dictionary dafür als Model verwenden.
Hi,
wenn du die Debug-Toolbar benutzt (d.h dort den "StepInto (F11)" Button), kannst du dann weiterdebuggen? Evtl. ist dann dein Keyboard-Mapping falsch eingestellt.