Laden...
T
thomas.at
myCSharp.de - Member
20
Themen
112
Beiträge
Letzte Aktivität
vor 6 Monaten
Dabei seit
19.09.2005
Alter
66
Beruf
SW-Entwickler
Herkunft
Österreich / Wien
Interessen
Bogenschießen
Erstellt vor 6 Monaten

Hallo

schau dir mal die Tools von Syncfusion an, dort gibt es ein Community-Version die gratis ist. Ich weiß aber nicht, in welchem Umfeld (privat oder Firma) du das verwenden willst.

mfG Thomas

Erstellt vor einem Jahr

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

Erstellt vor einem Jahr

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

Erstellt vor einem Jahr

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

Erstellt vor 2 Jahren

Hallo

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

Thomas

Erstellt vor 2 Jahren

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

Erstellt vor 2 Jahren

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

Erstellt vor 2 Jahren

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

Erstellt vor 2 Jahren

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

Erstellt vor 2 Jahren

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