Hallo, solche Fehler findest Du am besten heraus wenn du den Debugger verwendest, siehe [Artikel] Debugger: Wie verwende ich den von Visual Studio?
Ich vermute dass in der CSV-Datei eine leere Zeile existiert...
Hi,
versuchs mal mit dem Attribut DesignerSerializationVisibility
public class TestTextBox : TextBox
{
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
}
Hallo,
manchmal reicht es wenn man bei dem jeweiligen Verweis "Specific Version" auf "False" setzt (siehe Properties).
Vielleicht hilft es schon!?
Gruß
Steffen
Hallo,
so geht es:
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop) || e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
textBox1.Text = e.Data.GetData(DataFormats.Text).ToString();
}
else if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
textBox1.Text = System.IO.File.ReadAllText(files[0]);
}
}
Musst deine externe IP-Adresse verwenden siehe z.b.
https://www.whatismyip.com/de/
dann den benutzen Port im Router weiterleiten (Port forwarding) an deinen lokalen Rechner
Hallo,
hier noch ein Beispiel mit Parallel.For:
internal class Program
{
private static int[,] matrix;
private static void Main(string[] args)
{
Stopwatch watch = Stopwatch.StartNew();
matrix = new int[1000, 1000];
Parallel.For(0, 1000, y =>
{
CalcRow(y);
});
Console.WriteLine("Fertig! nach " + watch.ElapsedMilliseconds.ToString("0 ms"));
Console.ReadKey();
}
private static void CalcRow(int y)
{
Console.WriteLine("Bearbeite Zeile " + y);
for (int x = 0; x < 1000; x++)
matrix[x, y] = x * y;
}
}
noch eine schnellere Möglichkeit wäre mit Regex 😁 :
Regex reg = new Regex("stop this");
int count = reg.Matches(textBox2.Text).Count;
kurze Zeitmessung (builder.Length => 6.168.000):
static void Main(string[] args)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
builder.Append(_testText);
}
Method1(builder.ToString());
Method1(builder.ToString());
Method1(builder.ToString());
Console.WriteLine();
Method2(builder.ToString());
Method2(builder.ToString());
Method2(builder.ToString());
Console.WriteLine();
Method3(builder.ToString());
Method3(builder.ToString());
Method3(builder.ToString());
Console.ReadLine();
}
static void Method1(string text)
{
Stopwatch watch = Stopwatch.StartNew();
int count = (text.Length - text.Replace(_search, string.Empty).Length) / _search.Length;
watch.Stop();
Console.WriteLine("Method1 Count: {0} Duration: {1:0.0} ms", count, watch.ElapsedMilliseconds);
}
static void Method2(string text)
{
Stopwatch watch = Stopwatch.StartNew();
int count = text.Split(new string[] { _search }, StringSplitOptions.None).Length - 1;
watch.Stop();
Console.WriteLine("Method2 Count: {0} Duration: {1:0.0} ms", count, watch.ElapsedMilliseconds);
}
static void Method3(string text)
{
Regex reg = new Regex(_search);
Stopwatch watch = Stopwatch.StartNew();
int count = reg.Matches(text).Count;
watch.Stop();
Console.WriteLine("Method3 Count: {0} Duration: {1:0.0} ms", count, watch.ElapsedMilliseconds);
}
Ausgabe bei mir (Release ohne Debugger):
Method1 Count: 9000 Duration: 36,0 ms
Method1 Count: 9000 Duration: 34,0 ms
Method1 Count: 9000 Duration: 35,0 msMethod2 Count: 9000 Duration: 62,0 ms
Method2 Count: 9000 Duration: 75,0 ms
Method2 Count: 9000 Duration: 56,0 msMethod3 Count: 9000 Duration: 8,0 ms
Method3 Count: 9000 Duration: 8,0 ms
Method3 Count: 9000 Duration: 14,0 ms
Hallo,
probier mal ob du mit der Timer-Komponente (Windows.Forms.Timer) zurecht kommst. (hier kleines Tutorial dazu http://www.c-sharpcorner.com/UploadFile/mahesh/C-Sharp-timer/)
Dieser löst immer ein Ereignis aus wenn die eingestellte Zeit abgelaufen ist.
Gruß
Steffen
Hallo,
wieviele Zeilen werden in der DGV angezeigt?
Hier gibt es einen möglichen Lösungsweg wenn Du nicht soo viele Zeilen hast:
https://social.msdn.microsoft.com/Forums/de-DE/b0f4f6e7-d467-46f8-a1c6-f16fa9d27448/datagridview-vertikales-scrollen-pixel-fr-pixel?forum=visualcsharpde
Hier ein kleines Beispiel.
Zum Bearbeiten der Resourcen eignet sich z.b. ResX Resource Manager: http://resxresourcemanager.codeplex.com
Hallo,
ich glaube ihr habt ihn falsch verstanden.
@NervousElk: Willst du einen HIL-Simulator schreiben?
Hallo,
ich habe es mittlerweile gelöst.
Ich habe einfach das ganze ugedreht. Die Logik ist in eine eigene DLL-Assembly gewandert und wird von der Exe aufgerufen.
So funktioniert auch der Installer ohne Probleme.
Gruß
steffen
Hallo,
ich habe einen Windows-Dienst entwickelt. Dieser hat auch einen ProjectInstaller (mit ServiceInstaller und ServiceProcessInstaller).
Für die Installation habe ich ein Setup Projekt angelegt und als CustomAction die Assembly ausgewählt (als InstallerClass). So hat alles soweit funktioniert.
Ist es möglich den ProjectInstaller in eine extra dll auszulagern?
Nach dem ersten Test, installiert er einen Dienst und verweist auf diese DLL anstatt auf die EXE Datei.
Hat jemand eine Idee wie es gehen könnte?
Danke, Gruß
Steffen
Hallo,
du kannst auch die PictureBox in ein Panel reinlegen und dann hinausschieben...
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Top -= 10;
}
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Top += 10;
}
private void button3_Click(object sender, EventArgs e)
{
pictureBox1.Left -= 10;
}
private void button4_Click(object sender, EventArgs e)
{
pictureBox1.Left += 10;
}
Die Picturebox kannst dann auf "SizeMode=Autosize" stellen.
Dann kannst Du noch die Größe von dem Panel extra ändern (Width und Height). (D.h. der Bildausschnitt wird größer).
Hallo,
ich würde Dir raten eine abstrakte Klasse "Medium" zu implementieren.
siehe https://msdn.microsoft.com/de-de/library/sf985hc5.aspx
z.B:
internal abstract class Medium : IMedium
{
public string Name { get; set; }
public int Length { get; set; }
public int ReleaseYear { get; set; }
public IList<IAttribut> Attributs { get; }
public Medium(string name, int length, int releaseYear)
{
Attributs = new List<IAttribut>();
Name = name;
Length = length;
ReleaseYear = releaseYear;
}
}
CD/DVD-Klasse wäre dann viel schlanker:
namespace CD_DVD_Libary
{
internal class CD : Medium
{
public CD(string name, int length, int realeaseYear) : base(name, length, realeaseYear)
{
}
public override string ToString()
{
return string.Format("CD Name={0} Length={1} ReleaseYear={2}", Name, Length, ReleaseYear);
}
}
}
namespace CD_DVD_Libary
{
internal class DVD : Medium
{
public DVD(string name, int length, int releaseYear) : base(name, length, releaseYear)
{
}
public override string ToString()
{
return string.Format("DVD Name={0} Length={1} ReleaseYear={2}", Name, Length, ReleaseYear);
}
}
}
Ich sehe im Moment noch nicht den Sinn und Zweck die CD/DVD-Klasse extra zu implementieren die identisch sind außer der Klassen-Name.
Man könnte in der Medium Klasse einfach noch einen "Typ" als Enum definieren (mit CD, DVD als EnumValues).
Sonst wird sicherlich noch einiges von den anderen kommen. (z.b. Trennung Logik und UI (Console)).
Gruß
Steffen
Hallo niesel,
ich denke dass es daran liegt dass Du in der Spalte "Preis" einen String ablegst und kein double/decimal... d.h. mach das ".ToString()" weg dann wird es vielleicht funktionieren.
Gruß
steffen
Hallo,
vielleicht kannst Du was von einem Splashscreen abschauen, hier ein Beispiel:
http://www.codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C
Grüße
Steffen
Hallo Marcel,
bei einer Async Methode werden im Falle eines Fehlers immer eine AggregateException geworfen. Die eigentliche Ursache steckt aber in der InnerException der AggregateException:
Beispiel ungetestet:
try
{
loadFromDownloadDirToURL(...);
}
catch (AggregateException ex)
{
MessageBox.Show(ex.InnerException);
}
D.h. schau mal in die InnerException ob du da mehr Infos rauslesen kannst...
Grüße
Steffen
Hallo,
wenn deine gelesenen Bytes einfache ASCII-Zeichen sind, dann so ausgeben:
Console.WriteLine(Encoding.ASCII.GetString(header));
Oder willst Du den Rest von fsSource nach dem Header anzeigen?
Hallo,
datatMiete.Rows.Add(row);
ist überflüssig, meiner Meinung nach, tut "DataRow row = datatMiete.NewRow();" bereits eine leere Row anlegen.
Hallo,
wieso gehst Du überhaupt den Umweg über einen Timer?
SerialPort hat doch ein Event "DataReceived" welches ausgelöst wird wenn neue Daten anliegen:
https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived%28v=vs.110%29.aspx
Da gibt es auch ein Beispiel...
Viel Erfolg.
Hallo gigagames,
interessante Aufgabe.
Die Bilder können auch frei gedreht sein?
Ich würde so rangehen:
Es kann dann natürlich sein dass das zusammengesetzte Bild insgesamt verdreht ist, dass kann man nicht so einfach bestimmen wie rum das Bild gedreht gehört. Wenn aber die Bilder nicht verdreht sein können dann ist es noch einfacher.
Viel Erfolg dabei 😉
Hallo,
async/await und OpenAsync:
https://msdn.microsoft.com/de-de/library/hh223688%28v=vs.110%29.aspx
und hier noch ein Beispiel:
http://code.stonetip.com/2012/10/23/119/
Gruß
Steffen
Hallo,
es gibt auch eine Möglichkeit den Index im Array abzufragen:
Label[] test = new Label[4];
for (int i = 0; i < test.Length; i++)
{
test[i] = new Label();
}
int index = Array.IndexOf(test, test[2]);
Hallo, hier mein Vorschlag (nicht getestet!)
public static void read_grp()
{
const string Filename = @"C:\tmp\test2.grp";
string line;
string newFilename = "test";
using (StreamReader r = new StreamReader(Filename))
{
while (!r.EndOfStream)
{
try
{
line = r.ReadLine();
if (string.IsNullOrWhiteSpace(line))
{
// Leerzeile überspringen, nächste Zeile einlesen
continue;
}
if (line.StartsWith("[") && line.EndsWith("]"))
{
// Gruppennamen als Dateiname verwenden (ohne eckige Klammer)
newFilename = line.Substring(1, line.Length - 2);
// Ausgabekontrolle neuer Filename
Console.WriteLine("Dateiname: " + newFilename);
}
else
{
// Abschneiden Reststring nach '|'
line = line.Substring(0, line.IndexOf('|'));
// Abschneiden von 'Trackxxxx=' am Zeilenanfang // +1 damit auch das '=' gelöscht wird
line = line.Substring(line.IndexOf('=') + 1);
// Schreibe Zeile in neue Playlist
using (StreamWriter sw = File.AppendText(@"c:\tmp\" + newFilename + ".m3u"))
{
sw.WriteLine(line);
}
// Console.WriteLine("Dateiname: " + newfilename + Environment.NewLine + "Trackname: " + line); //Ausgabekontrolle
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
Hallo alexpj,
bitte beachte den Punkt 4 unter [Hinweis] Wie poste ich richtig?
Wo hängst Du den?
Eine Schleife hast Du doch schon (wo ReadLine aufgerufen wird). In dieser Schleife einfach vorher die Überschrift matchen, wenn zutreffend dann einen Dateinamen erstellen und gleich den streamwriter öffnen und bei der nächsten iteration die filenamen direkt reinschreiben.
Hallo,
hier ist es ganz gut beschrieben wie man an die Bild-Metadaten rankommt:
https://msdn.microsoft.com/de-de/library/xddt0dz7%28v=vs.110%29.aspx
Wenn das Erstell-Datum immer dem Aufnahmedatum entspricht dann kannst Du es auch nehmen. Dazu einfach eine Instanz von FileInfo erstellen und dann das Datum abfragen.
Viel Erfolg.
Kennst Du FreeFileSync?
Hallo alexpj und willkommen im Forum,
ich finde dass Regex hier fehl am Platz ist. Ein einfaches Substring wäre hier besser:
Console.WriteLine(line.Substring(0, line.IndexOf('|')));
Dein Pattern war schon richtig nur hast du die Falsche Methode verwendet:
line = Regex.Match(line, pattern).ToString();
Hier gibt es auch noch einen guten online Regex Tester: https://regex101.com
Gruß
Steffen
Hallo,
hast Du dieses schon probiert?
DataGridViewColumn.DisplayIndex-Eigenschaft
und
DataGridView.ColumnDisplayIndexChanged-Ereignis
Gruß
Steffen
Hi,
mit Hilfe von diesen Properties solltest Du zum Ziel kommen:
https://msdn.microsoft.com/de-de/library/system.windows.forms.form.startposition%28v=vs.110%29.aspx
https://msdn.microsoft.com/de-de/library/ms159414%28v=vs.110%29.aspx
Es gibt leider keine Möglichkeit die StartPosition auf Random zu stellen... dies musst Du selbst implementieren.
Gruß
Steffen
Hallo Palin,
Ab dem Framework 4.5.1 gibt es die Möglichkeit den LOH Deffragmentieren zu lassen.
Hast Du vielleicht ein Link dazu?
Dies habe ich mich auch schon mal gefragt.
Gruß
Steffen
Hallo herbivore,
vielen Dank damit hat es wunderbar geklappt. 👍
Kann es sein dass es bei Verknüpfungen auf dem Desktop ähnlich ist? Habe da auch die Vermutung dass das 32x32 Icon hochskaliert wird auf das große Symbol (48x48?).
Gruß
steffen_dec
Hallo,
ich habe ein Icon mit mehreren ImageTypes (16x16 8bit, 32x32 8bit, 48x48 8bit) angelegt und füge dieses in die ImageList eines Treeview ein:
treeView1.ImageList = new ImageList();
treeView1.ImageList.ImageSize = new System.Drawing.Size(16, 16);
treeView1.ImageList.Images.Add("Test", Properties.Resources.MyIcon);
treeView1.Nodes.Add("Test", "Test", "Test", "Test");
Das Treeview zeigt dann aber das Icon von 32x32 herunterskaliert auf 16x16.
Ich bin davon ausgegangen dass die Imagelist automatisch die richtige Größe verwendet!?
Hat jemand eine Idee wie man es lösen kann ohne jetzt ein eigenes kleines Icon erstellen zu müssen?
Danke! Gruß
Steffen
Hallo,
hast Du Dir mal Reflection angeschaut?
http://www.csharp-examples.net/reflection-property-names/
Gruß
Hier habe ich damals noch mein Beispiel gepostet:
Hallo,
hast Du dieses mal ausprobiert?
http://sevenzipsharp.codeplex.com/
Ich habe es schon mal erfolgreich einsetzen können.
Hallo spry64,
Du kannst doch über die CommandLine dann einen/mehrere Parameter übergeben:
ConsoleApplication.exe ipconfig IPv6
dann im Code entsprechend über die "args[]" zugreifen:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo(args[0]);
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string sOutput = p.StandardOutput.ReadToEnd();
p.WaitForExit();
string[] result = sOutput.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in result)
{
if (s.Contains(args[1]))
{
Console.WriteLine(s);
}
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
wenn Du dann noch bestimmte CommandLine-Befehle implementieren willst dann empfehle ich dir einen CommandLine-Parser:
Parser für Kommandozeilenparameter (CommandLineArguments)
Hallo,
Hast Du es probiert eine Abhängigkeit beim Dienst einzustellen? Evtl. wird diese Abhängigkeit beim Herunterfahren ebenfalls berücksichtigt!?
Wie wäre es wenn du es als normale Applikation (Autostart) laufen lässt?
Hallo,
hast Du es mal mit einer Unterabfrage probiert?
sowas?
select * from triggers where OID not in (select Trigger_ID from trigger_done WHERE Username = "123")
Hallo,
ich habe Dir ein Beispiel geschrieben:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("ipconfig", "/all");
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string sOutput = p.StandardOutput.ReadToEnd();
p.WaitForExit();
string[] result = sOutput.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in result)
{
if (s.Contains("IPv6"))
{
Console.WriteLine(s);
}
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
Füge diesen code einfach in die Main-Funktion einer neuen ConsoleApplication.
Hallo,
Tust Du die Registry in einem Treeview anzeigen?
In einem Treeview musst Du nämlich nicht sofort alle Ebenen einfügen, ich würde da erst zwei Ebenen füllen und beim Öffnen einer Ebene dann die nächste Unterebene füllen...
Sonst mal mit treeview.BeginUpdate/EndUpdate testen
Oder mit einer Virtual Treeview testen:
Virtual Treeview Implementation
Hallo Programmierhans,
vielen Dank, Dein Hinweis hat mich zur Lösung geführt:
for (int i = dtCategories.Rows.Count - 1; i >= 0; i--)
{
dtCategories.Rows[i].Delete();
}
NpAdapter.Update(dset, "categories");
Finde ich komisch dass mit Rows.Clear nicht funktioniert
Gruß
Steffen
verwendetes Datenbanksystem: PostgreSQL
Hallo Zusammen,
ich habe eine datengebundene Datagridview die eine Tabelle aus der Datenbank darstellt. Alle Änderungen (New, Edit und Delete) in der Datagridview werden schon korrekt in der Datenbank gespeichert.
Nun möchte ich eine Spezial-Funktion einbauen, diese muss vorher alle Datensätze aus der Tabelle löschen und dann neue Datensätze importieren. Import funktioniert schon, allerdings funktioniert das löschen noch nicht.
DGV wird so verbunden:
private NpgsqlDataAdapter NpAdapter;
private System.Data.DataSet dset = null;
private DataTable dtCategories = null;
private BindingSource bindingSource = new BindingSource();
dset = new DataSet("categories");
NpAdapter = new NpgsqlDataAdapter();
NpAdapter.SelectCommand = new NpgsqlCommand("Select * from categories ORDER BY cat_id", conn);
NpAdapter.Fill(dset, "categories");
dtCategories = dset.Tables["categories"];
bindingSource.DataSource = dtCategories;
dgvCat.DataSource = bindingSource;
das Löschen der Datensätze:
//Alle vorher löschen
dtCategories.Rows.Clear();
bindingSource.ResetBindings(false);
NpAdapter.Update(dset, "categories");
Die DGV erscheint dann leer, allerdings sind die Daten immer noch in der Datenbank. D.h. wenn ich das Formular schließe und erneut öffne sind die alten Daten immer noch da.
Was mache ich hier falsch?
Ich habe noch keine Erfahrung was das DataBinding angeht 🤔
Natürlich könnte ich auch ein SQL-Befehl zum löschen der Datensätze an die DB absetzen, ich wollte aber mit den bereits geöffneten DataAdapter/DataTable machen.
Danke für die Hilfe!
Steffen
hast Du da überhaupt reingeschaut?
This application demonstrates how a user can draw shapes and how hand writing recognition is performed in a XAML/C# Metro style app.
Es heißt doch nur dass es im Metro Style gemacht ist und WPF (XAML) verwendet wird... und Du willst doch in WPF dachte ich
Bei Codeproject gibt es sicherlich noch mehr ähnliches
vor paar Tagen gab es schon mal ein ähnliches Thema: Wie kann ich Button-BackgroundImages vergleichen?
Hallo,
ich mache es ähnlich wie Du mit der Übersetzung. Eine Rekursive Methode geht alle Controls durch und ändert das Control.Text auf die neue Sprache.
Bei mir gibt es keine nennenswerte Verzögerungen, wir haben auch recht viele Controls.
Es müsste also mit deinen Controls zu tun haben.
Du benutzt TableLayoutPanel mit Spalten die automatisch vergrößert werden? evtl. ist hier das Problem da bei jedem Resize von einem Control die Spalten neu angepasst werden. Wenn es wirklich so ist dann teste mal mit SuspendLayout/ResumeLayout von dem TableLayoutPanel.
Gruß
Steffen