Laden...
T
thomas.at myCSharp.de - Member
SW-Entwickler Österreich / Wien Dabei seit 19.09.2005 111 Beiträge
Benutzerbeschreibung

Forenbeiträge von thomas.at Ingesamt 111 Beiträge

11.04.2023 - 18:48 Uhr

Hallo

In der Klasse "DynamicMenuItems" löst Du in der Methode "ToolStripMenuItem_Click" das neue Event aus. Dieses wird dann in Form1 abonniert und dort kannst Du die Methode "DoSomethingInForm1" aufrufen. Eigentlich so wie BlonderHans in seinem Beispiel zeigt mit folgenden Änderungen:

        private readonly Form1 _form;

        public DynamicMenuItems( Form1 form )
        {
            _form = form;
            //Mache hier irgendwann irgendetwas
        }

Das kann gestrichen werden. In DynamicMenuItems folgendes eintragen:

        private void ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem MenuItem = (ToolStripMenuItem)sender;
            CheckMenuItem(MenuItem.Text);
            MessageBox.Show("Menu " + sender + " angeklickt");
            OnMyEvent(EventArgs.Empty);
        }
            

In Form1 dann das programmieren:

        public static void myObject_MyEvent(Object objSender, EventArgs e)
        {
            MessageBox.Show("myObject_MyEvent (" + objSender + ", " + e + ")");
            DoSomethingInForm1();
        }

Wenn Du mehrere Aktionen im Event in Form1 ausführen möchtest, dann musst Du halt ein eigenes EventArg definieren und dieses in den beiden Klassen entsprechend übergeben und auswerten.

P.S. Das registrieren des Events in Form1 sollte nicht im ButtonClick sein, sondern in FormLoad. Sonst wird nämlich bei jedem Klick des Buttons das Event nochmals registriert und dadurch das Event x-mal aufgerufen.

Ich hoffe das es jetzt etwas klarer wird und wünsche "Happy Coding"

Thomas

11.04.2023 - 09:44 Uhr

Hallo

Der Fehler liegt eigentlich daran, dass man das so gar nicht macht! Eine Unterklasse sollte nie ihren Parent kennen. Dazu verwendet man Events, siehe https://mycsharp.de/forum/threads/5960/faq-kommunikation-von-2-forms.

mfG

Thomas

01.03.2023 - 17:35 Uhr

Hallo

Meiner Meinung nach geht die Diskussion über NewtonSoft bzw. System.Text.Json am Thema vorbei.

Deine Json sieht doch so aus:

{"id":15,"hardwareComputerSerial":"1A2B3C4"}

d.h. die entsprechende Klasse zum Deseralisieren müsste dann so aussehen:


public class InventoryResponse
{
    public int id {get; set;}
    public string hardwareComputerSerial {get; set;}
}

Damit sollte es (egal welches Paket Du verwendest) funktionieren. Die Klasse kannst Du auch über Visual Studio erstellen lassen, indem Du den Json-String über "Edit/Paste Special/Paste Json as class" in eine vorhandene Datei einfügst.

mfG Thomas

14.11.2022 - 06:51 Uhr

Hallo

Schau mal auf der Seite von Syncfusion vorbei. Die stellen Ihre Komponenten auch als Community-Version zur Verfügung.

Thomas

10.05.2022 - 14:34 Uhr

Hallo

Ich würde das mit einem StingBuilder und zwei geschaltelten Schleifen machen:


      StringBuilder sb = new StringBuilder();
      int spalte11;
      string spaltezusatz = string.Empty;

      string[] zeilen = File.ReadAllLines(Textdatei);
      sb.AppendLine(zeilen[0] + ";Zusatzspalte");  //Headerzeile

      for (int zeile = 1; zeile < zeilen.Length; zeile++) //alle Zeilen ab 2. Zeile
      {
        spaltezusatz = string.Empty;
        string[] Spalten = zeilen[zeile].Split(';'); // Zeile zerlegen
        for (int spalte = 0; spalte < Spalten.Length; spalte++) // alle Spalten durchlaufen
        {
          if (spalte == 13)  // Spalte 13
          {
            if (Spalten[spalte] == "30") // Wert
            {
              if (Int32.TryParse(Spalten[11], out spalte11) && spalte11 <= 160) // Wert aus Spalte 11 umwandeln und auf <= 160 prüfen
                spaltezusatz = name10[spalte11]; // Wert aus name10 in "Zusatzspalte"
            }
            else
            {
              if (Spalten[spalte] == "10")
              {
                if (Int32.TryParse(Spalten[11], out spalte11) && spalte11 <= 43) // w.o.
                  spaltezusatz = name30[spalte11];
              }
              else
              {
                MessageBox.Show("Fehler");
              }
            }
          }
          sb.Append(Spalten[spalte] + ";");
        }
        if (!string.IsNullOrWhiteSpace(spaltezusatz )) // zusatzspalte gesetzt
          sb.AppendLine(spaltezusatz ); // zur Zeile hinzufügen
        else
          sb.AppenLine("");
      }
      File.WriteAllLines(Pfad, sb.ToString()); // Zeilen schreiben

LG
Thomas

28.02.2022 - 08:20 Uhr

Hallo

Danke an alle. Ich habe das jetzt über FileStreamResult, wie david.m im zweiten Link erwähnt hat, gelöst.

P.S.
Natürlich gibt es Prüfungen bezüglich Berechtigungen, ob das File überhaupt existiert usw. Diese habe ich aber nicht mit angegeben, da sie ja für die Frage nicht relavant sind.

mfG
Thomas

25.02.2022 - 11:48 Uhr

Hallo

Ich habe eine ASP.NET Core Web-API die ich auf Version 6 umstellen soll. In dieser ist in einem Controller folgende Methode:


    [HttpGet]
    public async Task<IActionResult> GetDocument(string datei)
    {
      if (!ModelState.IsValid)
        return BadRequest(ModelState);
      try
      {
        WebClient client = new();
        client.Credentials = CredentialCache.DefaultNetworkCredentials;
        Task<byte[]> t = client.DownloadDataTaskAsync(new Uri(datei));
        await t;
        var file = t.Result;
        return File(
          file,
          new ContentTypes().GetContentType(datei),
          "_File" + Path.GetExtension(datei).ToLowerInvariant());
      }
      catch (Exception ex)
      {
        return BadRequest(ex.GetAll());
      }
    }

Der String für die Datei sieht wie folgt aus:


 \\Server\Share\Directory\Filename

Jetzt meldet mir das System. dass "WebClient" deprecated ist und ich "HttpClient" statt dessen verwenden soll.
Nur erlaubt mir dieser nicht, eine Uri im Format "file://...." zu verwenden. Auch meine Recherche im Internet
hat mir keine Erkentniss darüber gebracht, wie ich dieses Problem lösen kann. Vielleicht habe ich nach den falschen Stichwörtern gesucht.
Kann mir vielleicht einer von Euch hierzu einen Tipp geben?

mfG
Thomas

31.01.2022 - 15:41 Uhr

Hallo

@dr4g0n76

Ich habe den Link eigentlich deshalb gepostet, vielleicht kannst Du hier Dir etwas abschauen, wie da die Berechnung gemacht wird, ob der Text gekürzt werden muss oder nicht. Daraus müsste sich doch dann ergeben, ob der Text ins Feld passt oder nicht.

mfG
Thomas

31.01.2022 - 07:02 Uhr

Hallo

Ich habe mal bei einem WPF-Projekt eine TextBox eingesetzt, die bei zu langem Text diesen abschneidet und durch "..." ersetzt. Dieses ist auf CodeProject zu finden. Vielleicht hilft Dir das ja.

mfG
Thomas

08.01.2022 - 17:49 Uhr

Hallo

Der Fehler würde auch mit SQL-Parameter passieren (beachte die Werte in der Combobox). So wie es jetzt aufgebaut ist, bekommt der TE nie Werte aus der DB.

Thomas

08.01.2022 - 13:37 Uhr

Hallo

Was Dir bis jetzt noch keiner gesagt hat: setze beim Vergleich nach dem Select-Command mal einen Breakpoint und schau Dir im Debugger Deinen Command an. Dann wirst Du den Fehler selbst bemerken.

Thomas

14.10.2020 - 20:09 Uhr

Hallo

Wenn Du auf "Form1.cs" doppelt klickst, dann öffnet sich entweder der Designer oder die "Code-Behind-Datei". Dies kannst Du einstellen, in dem Du mit der rechten Maustaste das Kontextmenü öffnest und dann die Option "Open with" auswählst. Danach kannst Du die Standardaktion festlegen. Du kannst im Kontextmenü auch direkt den Code oder den Designer öffnen.

Thomas

25.08.2020 - 09:17 Uhr

Hallo

Ich hatte einmal ein ähnliches Problem. Es gibt von DevExpress eine Komponente namens "Spreadsheet". Diese kann Excelfiles direkt einlesen (mit allen Formeln, benannten Felder usw.) und funktioniert genauso wie Excel. Man kann sogar eine Oberfläche dazu erstellen, die wie Excel aussieht. Über C# kannst Du dann die Felder auslesen, die Berechnungen starten und was Du sonst noch alles brauchst.

mfG
Thomas

16.07.2019 - 06:47 Uhr

Hallo

Mithilfe von Serilog konnte ich tatsächlich den Fehler finden. Ich hatte zwar die API neu deployed aber das Service nicht.

Danke
Thomas

16.07.2019 - 06:41 Uhr

Hallo

Für dein Problem brauchst Du doch nur eine Tabelle mit 4 Spalten:

**
DiID | MiID | Datum | Schicht
**

Damit kannst Du alle Tage die ein Mitarbeiter arbeiten soll eintragen und entsprechend auch suchen.

Thomas

09.07.2019 - 13:14 Uhr

Hallo
Ich habe folgendes Szenario:

 Postman  --&gt; Post mit Modell im Body  --&gt; ASP.NET Core --&gt; gRPC --&gt; Windowsservice  
            

Das ganze funktionierte bis jetzt alles tadellos und ich bekomme die richtige Antwort mit dem Status 200 zurück. Jetzt habe ich das Modell um einen Wert erweitert und die Middleware und das Service entsprechend erweitert. Bei mir in der Debugumgebung läuft alles so wie es soll. Jetzt habe ich das ganze in unsere Testumgebung deployed und wollte das mit Postman testen. Wenn ich jetzt den POST-Request absetze, dann kommt immer einen Error 404 (not Found) zurück. Wie kann ich herausfinden, wo der Fehler liegt?

P.S.
Andere Requests laufen einwandfrei, es liegt also nur an dem einen Request.

mfG
Thomas

26.03.2019 - 08:47 Uhr

Hallo

das Netzwerkprotokoll habe ich mir angesehen. Leider sieht man daraus nicht viel, da der Client natürlich immer dasselbe sendet. Wenn ich die Application im Commandfenster laufen lasse, dann kommt halt nach einigen Millisekunden die richtige Antwort, beim Service nach einigen Minuten der Reply mit HTTPResponse 200 und gRPCStatus 1. Dazwischen liegt das Service, das halt nichts macht.

Ich habe aber gestern noch einiges im Internet recheriert und bin dabei auf das Topshelf-Projekt (Topshelf) gestossen. Damit habe ich den Server neu aufgesetzt und jetzt funktioniert alles (Kommunikation über TCP für die alten WindowsClients und über gRPC für die Web-Applikation).

mfg Thomas

21.03.2019 - 14:35 Uhr

Hallo

Ich möchte aus einer .ASP NET-Core Application auf ein bestehendes Service (.Net FW 4.6.1) zugreifen. Ich habe mich hier für die Kommunikation mittels gRPC entschieden. Mein Server sieht wie folgt aus:


      string IP = "0.0.0.0";
      int Port = 23116;
      try
      {
        Server server = new Server
        {
          Services =
        {
          GRPC_Test.BindService(new Test_GRPC())
        },
          Ports = { new ServerPort(IP, Port, ServerCredentials.Insecure) }
        };
        server.Start();
        service.EventLog.WriteEntry($"API-Server auf {IP}:{Port} gestartet");
      }
      catch (Exception ex)
      {
        service.EventLog.WriteEntry("API-Server konnte nicht gestartet werden");
        service.EventLog.WriteEntry(ex.Message);
      }

und der Client so:


      int Port = 23116;
      //string IP = "127.0.0.1";                                // localhost
      string IP = "10.xx.xx.xx";                               // Server-IP

      Channel channel = new Channel(IP, Port, ChannelCredentials.Insecure);
      var client = new GRPC_Test.GRPC_TestClient(channel);

Wenn ich das ganze im Visualstudio (mit der lokalen IP im Client) laufen lasse, dann funktioniert alles wunderbar (HTTP-Request via Postman liefert richtigen Reply). Kopiere ich die EXE auf den Server, starte diese in einem CMD-Fenster und lasse den Client in VS laufen, dann funktioniert es auch wie es soll. Installiere ich die EXE aber am Server als Service, dann bekomme ich im Client nach einiger Zeit eine Exception mit folgendem Inhalt:

Fehlermeldung:
RpcException: Status(StatusCode=Cancelled, Detail=&quot;Cancelled&quot;)

und der Stacktrace zeigt auf die aufrufende Funktion. Leider konnte ich auch nichts über Google hierzu finden, daher hier meine Bitte um Hilfe. Vielleicht wissen ja die Gurus unter Euch, wo der Fehler verborgen ist.

mfg
Thomas

25.10.2018 - 14:22 Uhr

Hallo

stell Deine Befehle die Du senden möchtest (Timer, User) in eine Queue und arbeite diese sequentiell ab. Und zwar immer erst dann, wenn eine Antwort vollständig empfangen wurde. Ich vermute mal, dass Deine Peripherie durcheinander kommt, wenn es beim Senden eine neue Nachricht bekommt.

Thomas

30.09.2018 - 21:39 Uhr

Hallo pixfreak

Also ich habe alle möglichen Dokumentationen zum downloaden (siehe Anhang). Hast Du vielleicht noch eine altere Version des Helpviewers (aktuell 2.3)

mfg Thomas

30.09.2018 - 15:50 Uhr

Hallo

Du kannst über "Help/Add and Remove Help Content" im Help Viewer die Hilfen auswählen und downloaden (Manage Content). Danach im Visual Studio als Help-Viewer über "Help/Set Help Preference" "Launch in Help Viewer" auswählen.

Thomas

26.02.2018 - 10:48 Uhr

Hallo

Es geht mir nicht darum, die ganze bestehende Applikation/Infrastruktur umzustellen, sondern nur neue Plugins in die neue Welt zu bringen. Da das ganze nur bei uns im Haus läuft (internes LAN, hinter einer DMZ) wäre das Problem mit der Authentifizierung meiner Meinung nach nicht gegeben (oder sehe ich das falsch?).

Das ganze ist deshalb noch so allgemein, da ich erst mal die Möglichkeiten abklären möchte. Dies damit ich dann entsprechende Schulungen (ohne die es wohl nicht gehen wird) beantragen kann. Wenn ich aber meinem Chef sage "ich muss jetzt alles aus den letzten 12 Jahren umstellen" dann wird die Antwort wohl "Das kannst Du vergessen" lauten.

mfG Thomas

26.02.2018 - 06:55 Uhr

Guten Morgen
Ich bräuchte mal Eure Anregungen und Meinungen. Ich habe eine Client-Server-Anwendung welche seit ca. 12 Jahren von mir entwickelt und auch noch immer aktuell weiterentwickelt wird. Diese hat folgenden Aufbau:

  1. Server : Windows-Service mit Verbindung zu SQL-,Oracle- und Progress-Datenbanken. Nimmt die Aufrufe der Clients entgegen, verarbeitet diese und sendet via TCP einfache Typen (int,string…) oder eine DataTable zurück.

  2. Client : Eine Anwendung welche auf einem Netzlaufwerk liegt und mittels TreeView den Usern die Module anzeigt, für die sie über das AD berechtigt sind. Diese Module (derzeit ca. 85) werden dann als Plugins in eine eigene App-Domaine geladen und ausgeführt. Dadurch kann jederzeit ein Update der Plugins gemacht werden.

Diese Struktur läuft einwandfrei mit WinForms. Jetzt habe ich für die letzte Anwendung bereits den Pfad etwas verlassen, in dem ich für eine andere Anwendung eine Middleware in WPF geschrieben habe, die aber auch auf den Serverdienst zugreift.

Nachdem ja jetzt sehr viel von Web-Anwendungen (Angular, Typescript etc.) die Rede ist würde ich auch gerne auf diese Technologie umsteigen. Die Gelegenheit würde sich demnächst anbieten, da ein neues Projekt (= Plugin) ansteht.

Jetzt meine Frage an Euch: kann ich die bestehende Infrastruktur so weiter verwenden oder müsste ich das ganze neu auf die Beine stellen. Ich stelle mir das ungefähr so vor, dass ich aus der Clientanwendung die Angular-App aufrufe und diese via Web-API Verbindung zu meinem Windowsdienst aufnimmt. Oder seid ihr der Meinung „Schuster bleib bei deinen Leisten“ und ich sollte weiter mit WinForms arbeiten.

mfG
Thomas

02.10.2017 - 06:17 Uhr

Hallo

Du kannst folgendes Select ausführen:


select distinct
	ProjektID
,Datum3 = (select a.Datum from Test a WHERE a.Status = 3)
,Datum5 = (select b.Datum from Test b WHERE b.Status = 5)
from Test

dann solltest Du eine Tabelle mit den gewünschten Spalten bekommen.

Thomas

P.S.
Ich habe gerade festgestellt, dass obige Lösung nicht richtig funktioniert, sorry. Die Auswertung von hypersurf liefert Dir fast die richtige Lösung, es fehlt nur ein DISTINCT im Select.

28.10.2016 - 10:11 Uhr

Hallo

Danke für die Infos, werde mich mal mit REST beschäftigen.

mfG
Thomas

28.10.2016 - 08:57 Uhr

Hallo

Ich bräuchte mal einen Denkanstoß. Ich habe eine WPF-Applikation die jetzt mit einer Fremdapplikation via einer API-DLL angesprochen werden soll. Es sollen Daten in meine Applikation übergeben, dort verarbeitet und das Ergebnis wieder zurück geliefert werden. Ich habe jetzt probiert, über WCF aus der API-DLL mit meiner Anwendung zu kommunizieren (diese ist dann der WCF-Host). Hier habe ich aber zwei Probleme :

  1. Wenn meine Anwendung nicht gestartet ist funktioniert das natürlich nicht. Die Anwendung kann ich natürlich über einen Prozess starten, aber wie teile ich dann der API-DLL mit, das der Host bereit ist?
  2. Wenn die Anwendung läuft, funktioniert die Kommunikation erst mal. Schließe ich die Fremdanwendung aber und starte sie neu, dann kommt in meiner Anwendung nichts mehr an.

Ist hier WCF überhaupt das richtige Mittel oder würdet Ihr das anders lösen? Wenn WCF richtig ist, dann kann ich ja relevante Teile hier posten und auf Eure Hilfe bezüglich der Probleme hoffen.

mfG
Thomas

24.05.2016 - 13:38 Uhr

Hallo

Ich verstehe den Sinn nicht ganz. Wenn Du einen USB<->Seriell-Adapter an das System anschließt, dann wird diesem ein COM-Port zugewiesen. Dieser ist im Gerätemanager zu sehen. Dann startest Du ganz normal Dein altes DOS-Programm und konfigurierst dort den USB-COM-Port und fertig. Ein Problem hast Du nur, wenn dein Programm nur bestimmte COM-Ports zulässt. Dann musst Du den Port im Gerätemanager entsprechend um konfigurieren.

mfG Thomas

04.03.2016 - 09:26 Uhr

Hallo

Du könntest auch folgendes machen:


      string input = @"TRACK(6(2657,4331)(-2657,4331)),TRACK(6(-2657,4331)(-2657,-4331)),CIRCLE(296,294,-1378,3150)))";
      string pattern = @"((TRACK)\(\d\((?<X_Start>(\+|-)?\d*),(?<Y_Start>(\+|-)?\d*)\)\((?<X_Ende>(\+|-)?\d*),(?<Y_Ende>(\+|-)?\d*))";
      Regex regex = new Regex(pattern);
      var matches = regex.Matches(input);
      foreach (Match match in matches)
      {
        Console.Write("Start X : " + match.Groups["X_Start"].Value);
        Console.Write(" Y : " + match.Groups["Y_Start"].Value);
        Console.Write(" Ende X : " + match.Groups["X_Ende"].Value);
        Console.WriteLine(" Y : " + match.Groups["Y_Ende"].Value);
      }

lg Thomas

02.11.2015 - 09:51 Uhr

Hallo

Ich nehme mal an "Steuerbit" ist ein Boolean? Dann musst Du folgendes schreiben:

 
Steuerbit = ((Steuerwort & 1) == 1);
bool Bit2 = ((Steuerwort & 2) == 2);
usw.

Thomas

27.09.2015 - 20:53 Uhr

Hallo

Dein Fehler liegt schon in der Abfrage (Where schlafen = "true"). Sie Dir mal den Artikel über SQL-Parameter an.

Thomas

20.01.2015 - 10:28 Uhr

Hallo

Ich hatte vor Jahren so ein ähnliches Problem, damals mit Delphi 1.0 (Pascal). Ich habe es damals so gelöst, das ich eine Checksumme über die Datei gebildet und diese vor dem Laden überprüft habe. Hatte der Benutzer etwas im File geändert, stimmt diese natürlich nicht mehr und das Laden wurde abgebrochen.

Thomas

21.10.2014 - 06:49 Uhr

Hallo

Es geht schon, aber über einen Umweg:

  1. Kopiere die EXE-Datei auf den Desktop
  2. Hefte das Programm an die Taskleiste
  3. Mittels rechter Maustaste die Eigenschaften der Verknüpfung bearbeiten
  4. Bei "Ziel" und "Ausführen in" den Netzwerkpfad eintragen
  5. Das Programm kann dann aus der Taskleiste verwendet werden
  6. Das kopierte Programm am Desktop kann wieder gelöscht werden.

Thomas

20.12.2013 - 06:21 Uhr

Hallo Sebastian

Unter "Tools/Options/Windows Form Designer/General" kannst Du unter "Layout Settings" die Gridgröße und die Sichtbarkeit des Grids einstellen.

Thomas

16.10.2013 - 07:03 Uhr

Hallo

Da hast Du das mit dem Invoke noch nicht ganz verstanden. Wenn Du Invoke aufrufst, dann wird das wieder im Hauptthread ausgeführt. In Deinem Beispiel bedeutet dies, das Du den Thread "doit1" startest und dann sofort wieder das "make1" in der GUI ausführst. Erst wenn dies fertig ist, dann geht es mit "doit2" weiter. Starte direkt "make1" und "make2" und verlagere die Verschiebung des Panels mittels Invoke in die GUI.

mfG
Thomas

08.05.2013 - 06:56 Uhr

Guten Morgen

Ich habe gestern auch mit meiner Familie über dieses Thema diskutiert und dabei haben sich folgende Meinungen aufgetan:

  1. Mein 17-jähriger meint "Die sind meistens wirklich zu faul"
  2. Meine Frau ist gleicher Meinung wie Zommi.

@Zommi
Möglicherweise hast Du mit der "Informationsflut" wirklich recht. Das Internet ist mit uns "Alten" mitgewachsen, sodass wir uns langsam daran gewöhnen konnten. Zuerst gab es eben wenige Treffer auf eine Anfrage bei Google aus denen wir dann schnell die richtige Lösung finden konnten. Wenn man heute eine Frage stellt (und diese eventuell nicht ganz korrekt) dann wird man ja mit einigen tausenden Einträgen konfrontiert. Daraus die richtige zu finden mag dann manchmal schwierig sein.

@Coder007
Das manche keinen richtigen Zugang zum Programmieren haben, es aber trotzdem versuchen, könnte natürlich auch ein Grund für solche Posts sein.

Vielleicht bin ich auch in der glücklichen Lage, bei der Arbeit nicht zu sehr unter Zeitdruck zu stehen, was in der heutigen Zeit ja nicht mehr so selbstverständlich ist. So kann ich natürlich zuerst versuchen, den Fehler selbst zu lösen. Programmieren habe ich im Selbststudium erlernt, Schulungen gab es kaum. Ferner ist es bei mir so, dass ich bis vor zwei Jahren einziger Programmierer war und daher auch niemanden direkt Fragen konnte. Aus diesem Grund wurden eben Bücher und Google meine Ansprechpartner und man lernte mit der Zeit wie man an die entsprechenden Infos kommt. Beim heutigen Arbeitsdruck mag es eben effizienter sein (wie zommi schrieb) schnell mal die Frage zu stellen und auf rasche Antwort zu hoffen. Ob dies aber auch einen Lernerfolg bringt wage ich zu bezweifeln.

Thomas

07.05.2013 - 11:45 Uhr

Hallo

@FZelle
Es stimmt schon, das man heute eine größere Anzahl zu einem bestimmten Ereigniss zu Gesicht bekommt. Vielleicht sehe ich das dadurch zu streng.

@herbivore
So eine App fürs Bogenschießen gibt es schon, verwende ich auch. Aber bei manchen Dingen finde ich, dass man sich nicht nur auf die Technik verlassen sollte. Wenn jemand bei einer Rechnung behauptet 5 + 2 ist 10 (weil er aus versehen * statt + gedrückt hat) dann hilft Kopfrechnen schon 🙂

@telfa
Es spricht ja nichts dagegen, sich die Infos aus dem Internet zu holen. Was mich eher stört, ist das gleich gefragt wird, anstatt sich die Infos zu suchen und erst wenn keine passende Lösung gefunden wurde zu fragen.

Thomas

07.05.2013 - 09:12 Uhr

Hallo

Ich wollte auch nicht alle über einen Kamm scheren (deswegen das faul auch in Anführungszeichen). Ich selbst habe zwei Söhne (21 und 17) und ich habe festgestellt, das oft nicht selbst nach Lösungen gesucht, sondern gleich in diversen Foren nachgefragt wird (selbst bei Spielen). Meine Söhne hatten in der Schule 1 Stunde pro Woche ein Fach "Selbstständiges Arbeiten", was aber viel zu wenig war. Wenn man Ihnen dann eine "Aufgabe" stellt, dann können Sie nicht einmal einfache Abfragen in Google machen. Ich glaube, das genau hier das Problem liegt : die Jugendlichen lernen nicht alleine auf Lösungen zu kommen.

@herbivore
Das mit dem Taschenrechner ist ein gutes Beispiel. Ich habe noch viel mit dem Kopf und Rechenschieber gearbeitet. Heute wird im "Schnellverfahren" das 1x1 gelehrt und dann ab zum Taschenrechner. Ich bin Bogenschütze und nehme auch viel an Turnieren teil. Wenn man sieht wie schwer sich manche tun 6 Zahlen zwischen 1 und 10 zu addieren 🤔

Thomas

07.05.2013 - 06:47 Uhr

Hallo Leute

Ich bin schon lange Mitglied in diesem Forum und frage mich manchmal, ob die heutige Jugend durch das Internet teilweise zu "faul" zum lernen ist. Immer wieder sehe ich hier Anfragen wie "NullObjectReferenz", "wie programmiere ich eine Schleife" ect. Als ich vor 35 Jahren in die Programmierung einstieg gab es ja noch kein Internet. Damals mussten wir lesen, lesen und nochmals lesen. Heute erscheint es mir aber so, als ob bei jedem Problem sofort im Internet nachgefragt wird. Natürlich habe ich auch öfters Probleme, die ich auch nach einiger Zeit des versuchens nicht lösen kann. Dies kann aber fast immer mit Hilfe der Forumsuche oder mittels Google gehoben werden. Vielleicht sehe ich das ganze zu schwarz, aber meiner Meinung nach fehlt der heutigen Jugend die Fähigkeit, Probleme selbst zu lösen. Wie seht Ihr das?

mfG
Thomas

07.05.2013 - 06:27 Uhr

Ja gleich mehrere

  1. Debuggen
  2. FAQ ansehen
  3. Forumssuche verwenden

lG
Thomas

30.04.2013 - 14:09 Uhr

Hallo christof.k,

Du könntest auch eine Klasse mit der Struktur Deiner Eingaben erstellen und die entsprechenden Properties der Controls an die einzelnen Elemente binden. Dann kannst Du die Klasse einfach serialisieren und beim Start wieder deseralisieren. Wenn Du auch noch INotifyPropertyChanged implementierst kann die Speicherung gleich bei jeder Änderung geschehen.

Thomas

18.02.2013 - 06:51 Uhr

Hallo

Also dies ist wirklich ein top Programm. Einfach zu handhaben, schnell und gute Ausgabe. Was mir allerdings noch fehlt, ist die Beschreibung der Parameter bei den Funktionen (<param ...). Auf jeden Fall : weiter so!!

Thomas

14.12.2012 - 06:48 Uhr

Hallo

Du solltest Dir nochmal in einem Buch anschauen, wie das mit den Parametern funktioniert. Der CommandText wird dabei nie geändert. Aber was Du bis jetzt verschwiegen hast : welches Format hat den die Spalte 'Date' in der DB?

Thomas

07.12.2012 - 08:13 Uhr

Hallo

dies kann aber nur in einer Richtung, nämlich von oben nach unten, funktionieren. Wenn Du nämlich eine Domaine und Abteilung gewählt hast, dann siehst Du unter Team und Mitarbeiter ja nicht mehr alle Einträge.

mfG
Thomas

26.11.2012 - 06:45 Uhr

Hallo Zaphod

mach dir ein Usercontrol mit dem Label und der Combobox. Diese kannst Du dann einem Panel (mit Autoscroll) dynamisch hinzufügen. Im Usercontrol stellst Du dann entsprechende Properties und Events zur Verfügung und fertig.

Thomas

Edit:

  1. Zu langsam
  2. Mit den Usercontrols brauchts Du keine Positionsberechnungen, einfach den Dockstyle auf "Top" setzen.
27.09.2012 - 20:27 Uhr

Hallo

Das geht schon, Du must nur den Benutzer unter dem der Dienst gestartet wird auch auf die DB berechtigen. Ich habe dazu einen eigenen User angelegt und diesem den Dienst und der DB zugewiesen.

mfg Thomas

27.09.2012 - 13:57 Uhr

Hallo

mach einmal Dein Service und den Installer public, dann sollte es funktionieren.

Thomas

27.06.2012 - 14:26 Uhr

Hallo

@FZelle
Die Diskussion gab es hier doch schon einige male. Ich bin auch jemand der lieber mit Partial-Klassen statt mit #Regions arbeitet. Ist halt wie ein Ordner mit Trennblättern.

@hilefoks
Du kannst Visulastudio so einstellen, das per default der Editor aufgemacht wird. (Rechtsklick auf das File im Solutionexplorer, "Open with.." wählen und dort den "CSharp Editor" als Default setzen). Danach kannst Du ja im Sourcecode die Ansicht zwischen Code und Designer umschalten.

Thomas

09.05.2012 - 06:05 Uhr

Hallo

  1. Was ist denn "mandant_id" für ein Typ? Du übergibts hier einen String, ich schätze aber, das Feld ist ein Integer?

  2. Das "if" bei der CheckBox kannst Du dir auch sparen



cmd.Parameters.AddWithValue("@vAuswertung", this.checkBox1.Checked);


mfG Thomas

27.04.2012 - 06:19 Uhr

Hallo

wenn Du dem User keine Sortierung erlauben willst, dann must Du bei den Spalten den "SortMode" umstellen. Das AllowUserToOrderColumns ist ja für die Anordnung der Spalten zuständig

Thomas

25.01.2012 - 10:02 Uhr

Hallo

für die lokale Speicherung kannst Du SqlCE verwenden (braucht keine Installation). Zum Synchronisieren gibt es von Microsoft das SyncFrameWork. Damit können dann lokale Datenbanken mit einem SQL-Server synchronisiert werden.

mfG
Thomas