Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von hypersurf
Thema: DataGirdView DataSource
Am im Forum: GUI: Windows-Forms

Zitat von daniel94ever
ich versuche eine eigene Klasse zu schreiben die ich in einem DataGridView über DataSource anzeigen kann.

Habt ihr dafür eine Tutorial.

Sofern jemand eine Lösung für das Flackern hat, hast Du in meinem gerade erstellten Thread ein wunderbares Beispiel: DataGridView flackert total und bewirkt hohe CPU-Auslastung

Thema: DataGridView flackert total und bewirkt hohe CPU-Auslastung
Am im Forum: GUI: Windows-Forms

Hallo,

ich habe eine BindingList an ein DataGridView gebunden. Das Füllen und Ändern an sich funktioniert soweit auch sehr gut. Am Anfang wird meine Liste mit 72 Einträgen gefüllt. Dabei fängt das Grid bzw. die ganze Maske furchtbar an zu flackern und die CPU-Auslastung geht sage und schreibe auf 50 % hoch. Das Grid hat nur drei Spalten die minimal befüllt werden. Wenn das Grid vollständig gefüllt ist flackert es immer noch 8o

Das Autosizing scheint auch keine Auswirkungen zu haben (es kommt mit und ohne Autosize das komische Flackern).


BindingList<Tor> Torbelegungen = new BindingList<Tor>();
         dgBelegung.AutoGenerateColumns = false;

         DataGridViewTextBoxColumn makeColumn = new DataGridViewTextBoxColumn();
         makeColumn.DataPropertyName = "Tornummer";
         makeColumn.HeaderText = "Tornummer";
         makeColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
         dgBelegung.Columns.Add(makeColumn);

         makeColumn = new DataGridViewTextBoxColumn();
         makeColumn.DataPropertyName = "Spedition";
         makeColumn.HeaderText = "Spedition";
         makeColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
         dgBelegung.Columns.Add(makeColumn);

         makeColumn = new DataGridViewTextBoxColumn();
         makeColumn.DataPropertyName = "DatumUhrzeit";
         makeColumn.HeaderText = "Datum/Uhrzeit";
         makeColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
         dgBelegung.Columns.Add(makeColumn);

         dgBelegung.AutoSize = true;
         dgBelegung.DataSource = Torbelegungen;

         for (int i = 1; i ≤ 72; i++)
         {
            Torbelegungen.Add(new Tor(i, "", ""));
         }

   class Tor : INotifyPropertyChanged
   {
      public Tor(int pi_intTornummer, string pi_strSpedition, string pi_strDatumUhrzeit)
      {
         m_intTornummer = pi_intTornummer;
         m_strSpedition = pi_strSpedition;
         m_strDatumUhrzeit = pi_strDatumUhrzeit;
      }
      
      public event PropertyChangedEventHandler PropertyChanged;

      private int m_intTornummer;

      public int Tornummer
      {
         get { return m_intTornummer; }
         set 
         { 
            m_intTornummer = value;
            this.NotifyPropertyChanged("Tornummer");
         }
      }
      private string m_strSpedition;

      public string Spedition
      {
         get { return m_strSpedition; }
         set 
         { 
            m_strSpedition = value;
            this.NotifyPropertyChanged("Spedition");
         }
      }
      private string m_strDatumUhrzeit;

      public string DatumUhrzeit
      {
         get { return m_strDatumUhrzeit; }
         set 
         { 
            m_strDatumUhrzeit = value;
            this.NotifyPropertyChanged("DatumUhrzeit");
         }
      }

      private void NotifyPropertyChanged(string name)
      {
         if (PropertyChanged != null)
             PropertyChanged(this, new PropertyChangedEventArgs(name));
      }
   }

Ich verstehe absolut nicht, warum so eine in meinen Augen total einfache Sache so ein Flackern mit hoher CPU-Last verursacht. Habt Ihr eine Idee??

Thema: Sind in C# Werte*bereiche* bei switch möglich?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Okay, alles klar. Danke!

Thema: Sind in C# Werte*bereiche* bei switch möglich?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich habe mal eine Frage zur Switch-Anweisung:

Aus Visual Basic 6 bin ich es gewöhnt bei den verschiedenen Fällen (Cases) die ich mit Select Case abfrage, auch Wertebereiche abfragen zu können.
Das sieht in VB z. B. so aus:

Select Case mFileSize
        Case 0 To 999 ' Bytes
            FormatFileSize = Format(mFileSize) & " bytes"
        Case 1000 To 1023999 ' KB
            FormatFileSize = Format(mFileSize / 1024, "##0.0") & " KB"
        Case 1024000 To (1024 * 10 ^ 6) - 1 ' MB
            FormatFileSize = Format(mFileSize / (1024 ^ 2), "##0.0#") & " MB"
        Case Is > (1024 * 10 ^ 6)
            FormatFileSize = Format(mFileSize / (1024 ^ 3), "##0.0#") & " GB"
End Select

Ich habe leider keinerlei Beispiele hierzu in C# gefunden. Geht das in C# auch? Wenn ja, kann mir jemand bitte die Syntax posten? Google und die msdn spucken nichts hierzu aus.


Danke!

Thema: Objekte in einem Hastable nach einem Attribut sortieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hat jemand zufällig ein Beispiel einer SortedList mit Custom Compare was auch funktioniert? Ich hab mittlerweile 5 verschiedene Beispiele ausprobiert, die alle miteinander nicht funktionieren bzw. sich nicht mal starten lassen.

Ich möchte doch nur nach einem Attribut eines Objekts sortieren. Das muss doch mit Hausmitteln von .NET einfach machbar sein

Thema: Objekte in einem Hastable nach einem Attribut sortieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Dann macht das ganze mit dem SortedDictionary ja keinen Sinn. Ich will ja nicht nach dem Key sortieren.

Thema: Objekte in einem Hastable nach einem Attribut sortieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wie genau übergebe ich den Comparer an das Dictionary?
Was mache ich hier falsch? Der Compiler findet keine passende Überladung und ich verstehe gerade nicht so richtig, wie ich den Comparer übergeben muss X(

SortedDictionary<string, Spieler> colSpielerTeam1 = new SortedDictionary<string, Spieler>(new SpielerComparer());

   class SpielerComparer : IComparer<Spieler>
   {

      #region IComparer<Spieler> Member

      public int Compare(Spieler x, Spieler y)
      {
         if (x.Rang > y.Rang)
         {
            return 1;
         }
         else
         {
            return -1;
         }
      }

      #endregion
   }

Thema: Objekte in einem Hastable nach einem Attribut sortieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich komme per Google und Forumssuche irgendwie nicht weiter und denke dass Ihr mir bestimmt helfen könnt ;)

Ich habe ein Hashtable dem einige Objekte hinzugefügt werden. Ganz zum Schluss möchte ich den Hashtable anhand eines Attributs der Objekte sortieren. Wie stelle ich das an?


Vielen Dank!


Grußs HS

Thema: Regex: Alle Links aus HTML-Code ermitteln (mit Gruppen)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke, da hätte ich auch selber drauf kommen können

Thema: Regex: Alle Links aus HTML-Code ermitteln (mit Gruppen)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

da ich im Forum keine passende Lösung gefunden habe und partou nicht dahinter komme was an meinem Pattern nicht funktioniert frage ich Euch:


String pattern = @"<a href=""(?<url>[^""]+)"">(?<text>[^<]+)</a>";
Regex r = new Regex(pattern);
MatchCollection mc = r.Matches(s);


Mit diesem Code möchte ich gerne alle Links aus einem HTML-Quelltext ermitteln. URL und Text möchte ich dabei komfortabel über Groups abfragen können:


foreach (Match m in mc)
Console.WriteLine("{1} :  {0}", m.Groups["url"], m.Groups["text"]);


Leider bekomme ich kein Ergebnis wieder, was bestimmt an meinem Pattern liegt.
Hat einer von Euch Regex-Experten eine Idee, was ich falsch gemacht habe? 8)

Thema: Fenstertitel eines Fenster aus einer DirectX-Anwendung lesen
Am im Forum: Grafik und Sound

Ich hatte irgendwie gehofft dass es nicht so ist X(
Naja, dann muss ich irgendwie eine andere Lösung finden.

Vielen Dank für Eure Antworten!

Thema: Fenstertitel eines Fenster aus einer DirectX-Anwendung lesen
Am im Forum: Grafik und Sound

Hallo zusammen,

ich habe folgende Problemstellung:

Ich schreibe gerade ein Anitcheattool für ein Spiel. Dieses Tool liest in regelmäßigen Abständen Daten aus dem Speicherbereich des Spiels aus und protokolliert diese. Das ganze wird für einen offiziellen Wettbewerb (Europameisterschaft) des Spiels benötigt.
Damit kann die Jury später sicherstellen, dass jeder sich während der Missionen im Spiel an die vorgegebenen Parameter gehalten hat.

Hat ein Spieler eine Mission beendet, erscheint im Spiel ein spezieller Bildschirm. Diesen Bildschirm bzw. dieses Fenster muss ich irgendwie abfragen um gewisse Aktionen in meinem Programm auslösen zu können. Leider ist das Fenster anscheinend kein neues Fenster innerhalb der Anwendung, sondern wird einfach im Hauptfenster des Spiels dargestellt (ich weiss leider nicht genau wie das bei DirectX-Anwendungen funktioniert).

Jedenfalls habe ich mit diversen Prozessviewern versucht herauszufinden ob es sich hierbei um ein eigenes Fenster handelt oder nicht. Anscheinend nicht. Auch die EnumWindow-Klasse aus dem Thread Windowstitel auslesen gibt mir keine Childwindows wieder, wenn ich diese über das Handle der Hauptanwendung abfragen möchte.

Funktioniert die Fenstertechnik bei DirectX-Anwendungen anders? Oder ist es, wie vermutet kein neues Fenster was nach dem Beenden der Mission angezeigt wird. Gibt es die Möglichkeit Steuerelemente aus DirectX-Anwendungen abzufragen?

Wäre echt klasse, wenn mir jemand helfen könnte =)


Viele Grüße!

Thema: Hooks, Dlls, Prozesse
Am im Forum: Rund um die Programmierung

Problem unter zur Hilfenahme dieses Links http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ed63b033-663a-4a20-80a5-a732d31e9486/ selber gelöst.

Thema: Hooks, Dlls, Prozesse
Am im Forum: Rund um die Programmierung

Hallo Andreas,

auf der Suche nach Beispielcode wie ich systemweit Tastatureingaben (mir geht es um eine spezielle Tastenkombination) abfrage, bin ich auf deine Hook-Klasse gestoßen. Diese habe ich in mein Projekt eingebunden und das von mir definierte Event wird auch wunderbar aufgerufen.

Jetzt meine Frage als jemand der noch nicht so erfahren in C# ist: Wie frage ich mit Hilfe Deiner Klasse bestimmte Tastenkombinationen (z. B. SHIFT+ALT-N) ab?

Wäre klasse, wenn Du mir helfen könntest!


Viele Grüße

Markus

Thema: SharpZipLib - Extrahieren funktioniert nicht immer
Am im Forum: Rund um die Programmierung

Problem selber gelöst:

      private static void WriteZipFile(List<string> filesToZip, string path, int compression)
      {
         if (compression < 0 || compression > 9)
            throw new ArgumentException("Invalid compression rate.");

         if (!Directory.Exists(new FileInfo(path).Directory.ToString()))
            throw new ArgumentException("The Path does not exist.");

         foreach (string c in filesToZip)
            if (!File.Exists(c))
               throw new ArgumentException(string.Format("The File{0}does not exist!", c));


         ZipOutputStream stream = new ZipOutputStream(File.Create(path));
         stream.SetLevel(compression);

         for (int i = 0; i < filesToZip.Count; i++)
         {
            ZipEntry entry = new ZipEntry(Path.GetFileName(filesToZip[i]));
            entry.DateTime = DateTime.Now;

            entry.Size = System.IO.File.Open(filesToZip[i], System.IO.FileMode.OpenOrCreate,
                         System.IO.FileAccess.Read, System.IO.FileShare.Read).Length;
            stream.PutNextEntry(entry);

            byte[] buffer = new byte[4096];
            using (FileStream fs = File.OpenRead(filesToZip[i]))
            {
               StreamUtils.Copy(fs, stream, buffer);
            }
         }
         stream.Finish();
         stream.Close();
      }

Thema: SharpZipLib - Extrahieren funktioniert nicht immer
Am im Forum: Rund um die Programmierung

Hallo,

ich benutze die SharpZipLib um mehrere Dateien in meiner Applikation zu packen. Funktioniert soweit auch problemlos.

Wenn ich das Archiv jetzt z. B. mit Winrar entpacken will bekomme ich Fehlermeldungen, dass die im Archiv enthaltenen Dateien korrupt seien. Dasselbe bei 7zip. Nur mit der ZIP-Funktion von Windows-XP lassen sich die Dateien problemlos extrahieren.

Ich möchte aber sicherstellen, dass sich das Archiv mit allen gängigen Programmen extrahieren lässt.

Hier mein Quellcode:


      private static void WriteZipFile(List<string> filesToZip, string path, int compression)
      {
         if (compression < 0 || compression > 9)
            throw new ArgumentException("Invalid compression rate.");

         if (!Directory.Exists(new FileInfo(path).Directory.ToString()))
            throw new ArgumentException("The Path does not exist.");

         foreach (string c in filesToZip)
            if (!File.Exists(c))
               throw new ArgumentException(string.Format("The File{0}does not exist!", c));


         Crc32 crc32 = new Crc32();
         ZipOutputStream stream = new ZipOutputStream(File.Create(path));
         stream.SetLevel(compression);

         for (int i = 0; i < filesToZip.Count; i++)
         {
            ZipEntry entry = new ZipEntry(Path.GetFileName(filesToZip[i]));
            entry.DateTime = DateTime.Now;

            using (FileStream fs = File.OpenRead(filesToZip[i]))
            {
               byte[] buffer = new byte[fs.Length];
               fs.Read(buffer, 0, buffer.Length);
               entry.Size = fs.Length;
               fs.Close();
               crc32.Reset();
               crc32.Update(buffer);
               entry.Crc = crc32.Value;
               stream.PutNextEntry(entry);
               stream.Write(buffer, 0, buffer.Length);
            }
         }
         stream.Finish();
         stream.Close();
      }

compression wird mit 0 übergeben.

Hat jemand eine Idee woran das liegen könnte. Mache ich beim Packen in meiner Methode was falsch?

Thema: Drag & Drop: Listview nach Treeview und TreeNode dabei markieren
Am im Forum: GUI: Windows-Forms

Hallo zero_x,

danke für Deine Hilfe, durch das letzte Beispiel bin ich letztendlich auf die richtige Lösung gekommen:


      private void tvMain_DragOver(object sender, DragEventArgs e)
      {

         if (e.Data.GetData(typeof(ListViewItem)) != null)
         {
            TreeNode node = tvMain.GetNodeAt(tvMain.PointToClient(new Point(e.X, e.Y)));
            if (node != null)
            {
               e.Effect = DragDropEffects.Move;
               tvMain.SelectedNode = node;
               tvMain.Focus(); //wichtig damit das markierte Element auch so angezeigt wird.
            }
         }
      }



Man muss den Focus auf das Treeview setzen, damit das SelectedNode auch wirklich als ausgewählt (blau markiert) angezeigt wird. Denn wenn ein anderes Steuerelement den Focus erhält, bleibt zwar das Objekt SelectedNode erhalten, die blaue Markierung aber nicht...

Thema: Drag & Drop: Listview nach Treeview und TreeNode dabei markieren
Am im Forum: GUI: Windows-Forms

Hallo zero_x,

in dem Beispiel von Microsoft funktioniert das ebenfalls nicht, bzw. wird auch überhaupt nicht versucht.

Ich möchte nur den TreeNode über dem sich die Maus während des Drag & Drop-Vorgangs befindet markieren.

Thema: Drag & Drop: Listview nach Treeview und TreeNode dabei markieren
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich habe in meiner Anwendung die Drag & Drop-Funktionalität von einem ListView in ein TreeView implementiert. D. h. ich kann ListViewItems auf ein TreeNode ziehe und dann wird automatisch unter dem TreeNode ein neuer Node generiert. Soweit so gut.

Um dem Anwender den Drag & Drop-Vorgang zu erleichtern, würde ich gerne den TreeNode über dem sich die Maus beim Drag & Drop-Vorgang gerade befindet markieren.

Das funktioniert leider nicht so einfach wie ich es mir vorgestellt habe, bzw. ich mache irgendwas falsch und finde den Fehler nicht:

      private void tvMain_DragOver(object sender, DragEventArgs e)
      {

         if (e.Data.GetData(typeof(ListViewItem)) != null)
         {
            Point p = new Point(e.X, e.Y);
            tvMain.PointToClient(p);
            TreeNode node = tvMain.GetNodeAt(p);

            if (node != null)
            {
               tvMain.SelectedNode = node;
            }
         }
      }


Auch wenn "node" nicht null ist funktioniert das setzen des SelectedNode's nicht: Der Node wird nicht blau markiert.


Hat jemand eine Idee, woran das liegen könnte?


Danke & Gruß

Markus

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Nicht automatisch generieren lassen heisst nicht über "GUID erstellen"? Wie soll ich die GUID dann erstellen?

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Visual Studio 6 läuft auf einem anderen rechner, als das .NET-Studio.

Die beiden Dateien (die DLL und die TLB) werden im Moment immer Testweise auf den VB6-Rechner kopiert und dort registriert.

Das mit dem Verweis rausnehmen habe ich ausprobiert, nützt leider nichts

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von kleines_eichhoernchen
Das Intellisense von VB6 die Funktionen nicht anzeigt, liegt daran, dass VB6 nicht jede COM-Bibliothek (in dem Fall eine DOT NET Assembly) lesen kann. Da es das Problem in mehreren IDEs gibt, gibt es die Möglichkeit, alle COM-Klassen sowie Interfaces mit dem jeweiligen Funktionen als eine Typbibliothek (Endung .tlb) zu exportieren. Dort enthalten sind dann jeweils die entsprechenden Verweise zu den einzelnen Funktionen der Bibliothek. In deiner IDE bindest du statt die COM-Bibliothek anschließend die TLB ein.

Das man eine DispID in DOT NET angeben muss, ist mir auch neu. Normal weißt die CLR eine entsprechende ID jedem öffentlichen Member zu.

Die TBL-Datei habe ich bereits eingebunden. Als es das erste Mal funktioniert hat, hat VB mir auch alles wunderbar angezeigt. Als ich dann eine weitere Funktion hinzugefügt hab, wurden mir in VB keine Funktionen mehr angezeigt. Komischerweise sehe ich im Objektkatalog in VB meine beiden Funktionen als Events.


Gehe ich beim Erstellen der TBL-Datei denn richtig vor?

tlbexp VBtestProjekt.dll /out:VBtestProjekt.tlb
regasm VBtestProjekt.dll /tlb:VBtestProjekt.tlb
gacutil /i VBtestProjekt.dll


Die letzten beiden Schritte wiederhole ich auf dem Client-PC wo VB6 installiert ist.

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

So funktioniert es jetzt:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


namespace ClassLibrary1
{
    [Guid("E0BEF3E9-8297-4a69-BEC3-662451A620C2"),
     InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IVBTest
    {
        [DispId(1)] string testfunktion(string test);
        [DispId(2)] int testfunktion2(int a, int b);
    }


    [Guid("8ABEFB55-19FA-4902-A9BF-834378F6AD75"),
     ClassInterface(ClassInterfaceType.AutoDispatch),
     ComSourceInterfaces(typeof(IVBTest))]
    public class VBTest : IVBTest
    {
        public VBTest()
        {

        }

        public string testfunktion(string test)
        {
            return test;
        }

        public int testfunktion2(int a, int b)
        {
            return a + b;
        }

    }
} 


Sehr komisch ist aber, dass die IntelliSense von VB die beiden Funktion nicht anzeigt, die Funktionen aber aufgerufen werden können und auch funktionieren.

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Norman-Timo,

die Threads habe ich bereits mehrfach gelesen (bzw. mittlerweile könnte man auch studiert sagen).

Ich habe zwei Probleme:

1.) Ich kann die Klasse VBTest in VB6 nicht instanzieren (Laufzeitfehler 429)
2.) Die Klasse VBTest beinhaltet im VB6-Objektkatalog nicht die Funktion "testfunktion". Diese wird mir in VB6 als Teil der Interfaceklasse angezeigt. Meiner Meinung nach dürfte die Interfaceklasse in VB6 gar nicht auftauchen.


Gruß Markus

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

ich möchte gerne eine C#-DLL schreiben, die ich dann in VB einbinden kann.
Das Erstellen der Typelib funktioniert problemlos, und diese lässt sich auch in VB einbinden.

Allerdings wird mir meine Testmethode in VB in der Interface-Klasse IVBTest angezeigt, statt in der richtigen Klasse VBTest.
Instanzieren lässt sich die VBTest-Klasse auch nicht (Laufzeitfehler 429).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
    [Guid("E0BEF3E9-8297-4a69-BEC3-662451A620C2")]
    public interface IVBTest
    {
        string testfunktion(string test);
    }


    [Guid("8ABEFB55-19FA-4902-A9BF-834378F6AD75"),
     ClassInterface(ClassInterfaceType.None),
     ComSourceInterfaces(typeof(IVBTest))]
    public class VBTest : IVBTest
    {
        public VBTest()
        {

        }

        public string testfunktion(string test)
        {
            return test;
        }

    }
}

VB6 läuft auf einem anderen Rechner als die .NET-Entwicklungsumgebung.


Hat jemand eine Idee, was ich falsch mache?


Danke und Gruß

Markus