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 tabstop
Thema: Von Form abgeleitete Form nicht in VS Designer darstellbar
Am im Forum: GUI: Windows-Forms

Also wenn du mich fragst, hast du ein Problem in der Basisform. Bedenke, dass beim Laden der geerbten Forms der Designer alle Routinen der Bassiform durchläuft, die beim Laden einer Form nun mal stattfinden (also Konstruktor, Events OnLoad, OnPaint, ...). Schau dir deine Routinen der Basisform mal genauer an. Evtl. knallt es in einer von dieser. Z.B. könnte es ein Problem sein, wenn du beispielsweise im OnLoad-Event auf eine DB zugreifen solltest.

Du kannst im übrigen auch Visual Studio debuggen. Öffne eine zweite Sictzung und attache dich mit der ersten Sitzung.

Thema: DataGrid soll fensterfüllend alle Zeilen darstellen, die Schriftgröße soll den max. Platz einnehmen
Am im Forum: GUI: WPF und XAML

Zitat von BlackMatrix
Wie schaut es aus eine ViewBox um das DataGrid zu packen?

Ja, habe ich auch schon drüber nachgedacht und getestet. Jedoch ist es so, dass die ViewBox alles eingebettete transformiert, also neben dem Text z.B. auch die DataGrid-Linien. Dann kommt es drauf an, wieviel Zeilen gleichzeitig dargestellt werden. Bei 18 Zeilen z.B. fällt es nicht so auf, bei weniger Zeilen aber schon.

Von daher ist diese Lösung nicht optimal, aber danke für den Vorschlag.

Thema: DataGrid soll fensterfüllend alle Zeilen darstellen, die Schriftgröße soll den max. Platz einnehmen
Am im Forum: GUI: WPF und XAML

Moin,

ich versuche ein DataGrid derart zu füllen, dass sämtliche Zeilen des DataGrids auf einen Blick sichtbar sind ohne Scrollleiste. Dabei soll die Schriftgröße in den Zellen sowie im Header maximal groß sein. Als Beispiel könnte man sich die Fußballbundesligatabelle vorstellen, bei der auf einen Blick alle 18 Mannschaften sichtbar sind.

Ich bekomme es soweit hin, bis auf die Headerzeile. Bin jetzt an einem Punkt gekommen, wo ich Unterstützung benötige. Anbei meine bisherige Lösung:


<Window x:Class="WpfDataGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <DataGrid  Name="dataGrid1" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" VerticalScrollBarVisibility="Hidden" RowHeaderWidth="0" SizeChanged="dataGrid1_SizeChanged">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="INT" Width="1*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Viewbox>
                            <TextBlock Text="{Binding IntValue}"/>
                        </Viewbox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="STRING" Width="2*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Viewbox>
                            <TextBlock Text="{Binding StringValue}"/>
                        </Viewbox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Window>


  public partial class MainWindow : Window
  {
    private List<BO> dataList;

    public MainWindow()
    {
      InitializeComponent();

      this.dataList = GenerateData();
      this.dataGrid1.ItemsSource = dataList;
    }

    private List<BO> GenerateData()
    {
      List<BO> dataList = new List<BO>(
        new BO[]
        { 
          new BO(){ IntValue = 10, StringValue= "Text 10"},
          new BO(){ IntValue = 20, StringValue= "Text 20"},
          new BO(){ IntValue = 30, StringValue= "Text 30"},
          new BO(){ IntValue = 40, StringValue= "Text 40"}
        });

      return dataList;
    }

    private void dataGrid1_SizeChanged(object sender, SizeChangedEventArgs e)
    {
      this.dataGrid1.RowHeight = this.dataGrid1.ActualHeight / (dataList.Count + 1);
      this.dataGrid1.ColumnHeaderHeight = this.dataGrid1.ActualHeight / (dataList.Count + 1);
    }
  }


public class BO
  {
    public int IntValue { get; set; }
    public string StringValue { get; set; }
  }

Thema: Entwurfsmuster für mehrere/viele periodisch zu aktualisierende Anzeigen
Am im Forum: Rund um die Programmierung

Vielen Dank für die rege Teilnahme und konstruktiven Antworten.

Zitat von Palin
Hi ich wäre jetzt bei der Beschreibung davon ausgegangen, das es sich bei den Anzeigen um wirklich physikalisch Vorhandene Anzeigen handelt. Auf denen eine Software läuft, dann könnten die Anzeigen sich bei bedarf selber Updaten, die Daten könnte man dann über einen Service bereitstellen.

Die Anzeige ist eine echte physikalische Einheit (7-Segment Anzeige mit mehreren Ziffern und zwei oder drei Reihen). Die selber ist unveränderlich insofern kann man dort auch keine eigene Software einspielen.
Zitat von Mallett
Wie werden denn die Daten der einzelnen Anzeigen ermittelt?

Die Daten kommen aus einer SQL Datenbank. Wir rechnen mit ca. 500000 Datenbewegungen pro Tag. Eine eventgesteuerte Verarbeitung schließe ich im Moment aus. Nicht jede Bewegung soll auch tatsächlich zu einer Aktualisierung der Anzeige führen.
Zitat von herbivore
ich versuche es mal mit einem Vergleich. Bei einem Strategiespiel muss jede Einheit auch in festen Abständen aktualisiert werden. Deshalb hat die einzelne Einheit aber keinen eigenen Timer, sondern es wird durch die Spiellogik (Controller) ein Takt von außen vorgegeben. Das würde ich auch in deinem Fall empfehlen und ich wüsste kein objektorientiertes Prinzip, gegen das man damit verstoßen würde. Die Anzeigen könnten weiter als Objekte gekapselt sein, nur der Anstoß kommt von außen. Es ist ohnehin der Normalfall, dass der Anstoß für die Verarbeitung in einem Objekt von außen kommt.

Also wird es wohl so etwas wie einen Controller geben, der für die Informationsbeschaffung und Fütterung der Anzeigen zuständig ist. Das sehe ich inzwischen genauso. Dann muss ich mir Gedanken machen zur Implementation des Controllers.

Vielen Dank erst mal.

Thema: Entwurfsmuster für mehrere/viele periodisch zu aktualisierende Anzeigen
Am im Forum: Rund um die Programmierung

Es soll folgende Anwendung erstellt werden: Ein Lager besteht aus mehreren Regalen, die in Reihen strukturiert sind. Für jede Reihe soll ein Anzeigesystem aufgestellt werden, wo bestimmte Informationen der Lagerreihe (z.B. Anzahl freie Stellplätze) dargestellt werden. Diese Informationen sollen stetig aktualisiert werden (z.B. periodisch jede Minute). Es gibt beispielsweise 40 Anzeigesysteme.

Die Ansteuerung einer Anzeige sähe im Prinzip so aus: Ermittle Information für Anzeige -> stelle Information auf Anzeige dar -> warte eine Minute -> Ermittle Information für Anzeige …

Ich suche jetzt noch nach einem geeigneten bzw. praktischen Entwurfsmuster für die Ansteuerung aller Anzeigen. Ein erster Gedanke war, für jede Anzeige ein Instanz zu erzeugen, welches einen eigenen Timer besitzt, der dann jede Minute entsprechende Aufgaben bewältigt. So ganz bin ich von dieser Implementation jedoch noch nicht überzeugt. Wenn man ins Extreme gehen würde und man hätte z.B. 1000 Anzeigen hätte man ja auch 1000 Timer. Wie würdet ihr das umsetzen?

Jede Anzeige besitzt eine IP-Adresse und wird mittels TCP angesteuert (Socket, TcpClient), das ist aber nicht Teil der Fragestellung.

Thema: Deserialisieren einer Property vom Typ List
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Benutze folgende XmlHelper Klasse.

Deine Testklasse:


public class TestClass
{
  private List<Book> books = new List<Book>();

  public string Name { get; set; }

  public string Id { get; set; }

  public List<Book> Books
  { 
    get { return this.books; } 
  }
}

public class Book
{
  public string Title { get; set; }

  public string Author { get; set; }
}

XML Serialisieren und wieder zurück.


TestClass tc = new TestClass() { Id = "1", Name = "Test" };
tc.Books.Add(new Book() { Author = "Hans Meyer", Title = "Das Buch" });

var erg = XMLHelper.SerializeToXMLString(tc, Encoding.Default, true);

TestClass tc2 = XMLHelper.DeserializeFromXMLString<TestClass>(erg);

Thema: Verschiedene Forms immer auf die gleiche Weise erzeugen
Am im Forum: GUI: Windows-Forms

Wenn ich mir deinen Code anschaue, willst du vermutlich beim Klick die Form neu öffnen bzw. wenn sie schon geöffnet worden ist nach vorne bringen.

Vielleicht schaust du dir auch mal diesen Thread Fenster in den Vordergrund bringen an. Dort gibt es eine kleine MDI-Testanwendung, die ich denke mal deinen Anforderungen entspricht.

Thema: [gelöst] NEWGUID() mit EntityFramework
Am im Forum: Datentechnologien

Noch eine kurze Anmerkung zu allen Beiträgen.

Es muss unterschieden werden, ob die ID mittels NEWID() oder NEWSEQUENTIALID() erzeugt werden soll. Im Falle NEWID() ist es kein Problem, die ID auf dem Client zu erzeugen. Im Falle NEWSEQUENTIALID() geht das eben nicht, wobei diese Art und Weise auch mitunter den entscheidenden Vorteil hat, dass der Index nicht so schnell fragmentiert.

Falls für die Tabelle einige Millionen Datensätze pro Tag erzeugt werden sollten, ist der Datentyp GUID aus meiner Sicht eh nur dann sinnvoll, wenn die ID mittels NEWSEQUENTIALID() erzeugt wird aufgrund des Fragmentierungsproblems. Bei Massendaten würde ich immer INT(autoincrement) als Datentyp bevorzugen.

Thema: [gelöst] COM-Port-Abfrage startet manchmal nicht und liefert nur die gleichen Werte
Am im Forum: Rund um die Programmierung

Benutze mal ein Programm wie z.B. Hyperterminal und schaue dir dort die eingelesen Daten an, um einen Programmierfehler auszuschließen. Evtl. sind die Einstellungen des COM-Ports auch nicht richtig.

Thema: Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Der Fehler liegt meistens zwischen den Ohren.

Vielleicht helfen dir folgende Links weiter:

GetReferencedAssemblies

Assembly Binding Log Viewer

oder du benutzt irgendeinen Reflector und schaust dir dort die ref. Assemblies jeder einzelnen ausgelieferten Assembly an.

Thema: Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich würde mal Studio schließen, die obj- und bin-Ordner komplett löschen, Visual Studio starten und dann neu kompilieren. Vorher alle referenzierten Assemblies auf die Versionsnummern hin überprüfen.

Evtl. hilft das.

Thema: MSSQL Perfomance Frage Index
Am im Forum: Datentechnologien

Mein Tip,

- neue Spalte ID (int, autoincrement) als Primärschlüssel; da viele Daten eingefügt werden sollen, wäre eine Spalte vom Typ uniqueidentifier nicht so günstig wegen Fragmentierung
- unique Index auf ID1 und ID2
- Index auf ID2

Thema: Problem mit devexpress und Assemblies
Am im Forum: Web-Technologien

Lass dir die Seite von Studio deployen, dann sind dort alle Assemblies und deren abhängige Assemblies dabei. Denn wahrscheinlich ist das dein Problem. Ich nehme an, dass du nur die Assemblies kopiert hast, die du direkt im Projekt referenziert hast.

Thema: Problem mit SCOPE_IDENTITY
Am im Forum: Datentechnologien

Also bei tut's. Zumindest im Kontext des SSMS. Bekomme zwei Ergebnisse, zuerst die ID von SystemNotes, dann von Foo; so wie man es erwartet.

Thema: Workflow & SPS, Konzept
Am im Forum: Rund um die Programmierung

Ich meinte natürlich die Firma MHJ und nicht IBH, sorry. Die Links sind beide richtig (dasselbe Produkt).

Zum Glück bin ich kein SPS-Programmierer, von daher kann ich nicht ins Detail einsteigen. Der Treiber bietet im wesentlichen Methoden an, um Ein- und Ausgänge (oder auch Zähler und Codeunits; ich glaube, die nennt man so) abzufragen oder zu setzen. Das Ganze muss aktiv von der Applikation aus gehen, ist also nicht Event gesteuert seitens der SPS.

Was das Steuern und Regeln angeht, so muss das wohl meiner Ansicht nach das SPS-Programm machen. Dafür ist es ja schließlich da.

Thema: Workflow & SPS, Konzept
Am im Forum: Rund um die Programmierung

Also wir haben mit Hilfe der ComDrvS7 von IBH ein Projekt umgesetzt um mit einer SPS zu kommunizieren. Da ging es jedoch nicht um die Steuerung einer SPS, sondern im wesentlichen nur um die Abrage von Statuszuständen.

Einfache Befehle, um z.B. die Ware von einer Anlage auszupushen, geht natürlich auch.

Thema: [Gelöst] Aus einem Thread in Registry schreiben: UnauthorizedAccessException
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Möglicherweise benutzt du die OpenSubKey-Methode ohne den zweiten Parameter anzugeben. Der sollte bei dir den Wert true enthalten.

siehe OpenSubkey

Thema: Performance/Tabellen-Design: HilfsID-Spalte vs. mehreren Joins?
Am im Forum: Datentechnologien

Wenn du sagst, dass jeder Kunde nur seine eigenen Artikel sehen soll, dann musst du das im Prinzip so machen. gäbe es diesen Verweise nicht, würde ja der Kunde nur die Artikel sehen, die er bereits bestellt hat.

Ein neuer Kunde würde also gar keine Artikel sehen.

Thema: Nutzen Drittanbieter-Komponenten (z.B. DevExpress) mehr als sie kosten (an Einarbeitungsaufwand)?
Am im Forum: GUI: Windows-Forms

Warum das Rad neu erfinden, wenn es das schon gibt.

Ganz gleich um welche Komponenten Library Drittanbieter es geht, der Faktor Zeit in Sachen Einarbeitung steht in keinem Verhältnis zu dem Zeit- und Frustfaktor etwas nicht im Standard vorhandes selbst umzusetzen.

Zumindest bei der Umsetzung einer kommerziellen Applikation gibt es für mich keine Alternative.

Thema: Nutzen Drittanbieter-Komponenten (z.B. DevExpress) mehr als sie kosten (an Einarbeitungsaufwand)?
Am im Forum: GUI: Windows-Forms

Der Mehraufwand lohnt sich, im speziellen wenn man DevExpress nutzt. Z.B. Das Grid-Control von DE im Vergleich mit dem Standard, das sind Welten.

Wir nutzen DevExpress schon länger und sehr zufrieden und wollen es auch nicht mehr missen.

So, genug Werbung gemacht. :)

Thema: String.Format + Vorzeichen immer einblenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielleicht solltest du die Zahlen rechtsbündig mit definierten Anzahl Nachkommastellen ausgeben.

Thema: Problem mit ClickOnce Installer: kann nicht auf Setting Datei zugreifen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Grundsätzlich geht das auch mit ClickOnce. Wie greifst du auf die Einstellungen zu?

Thema: best practise: Event einer aggregierten Klasse weiterleiten
Am im Forum: Rund um die Programmierung

Ich frage mich, was der beste Weg ist, ein Event einer aggregierten Klasse weiterzuleiten. Dazu folgender Code (KlasseA soll von aussen benutzt werden):


public class KlasseB
{
  public event EventHandler EventVonB;

  public void DoSomething()
  {
    OnEventVonB();
  }

  protected virtual void OnEventVonB()
  {
    EventHandler tmp = EventVonB;
    if (tmp != null)
    {
      tmp(this, new EventArgs());
    }
  }
}


public class KlasseA
{
  private KlasseB klasseB;

  public event EventHandler EventVonA
  {
    add { this.klasseB.EventVonB += value; }
    remove { this.klasseB.EventVonB -= value; }
  }

  public KlasseA()
  {
    this.klasseB = new KlasseB();
  }

  public void DoSomethingWithB()
  {
    this.klasseB.DoSomething();
  }
}

Wie macht ihr das? Insbesondere, falls noch eine KlasseC hinzukäme, die in KlasseB benutzt wird und man möchte das Event von KlasseC verfügbar machen.

Alternativ hätte ja auch KlasseA das Event von KlasseB abonnieren können und dieses durchreichen können. Nur würde ich am liebsten die ganze Aufrufkette so klein wie möglich halten.

Thema: Hauptformular (Owner) in Vordergrund holen
Am im Forum: GUI: Windows-Forms

Vielleicht solltest du MDI als Lösung in Betracht ziehen. Unter MDI-Testanwendung gibt es eine Testanwendung, die du dir anschauen kannst.

Thema: datagridview mit bindingsource - Ermitteln welche gebundenen Objekte (Zellen) markiert sind
Am im Forum: GUI: Windows-Forms

Anstelle von SelectedCells solltest die lieber über SelectedRows iterieren.

Thema: DataGridView - Neue Zeile oben (also die leere Zeile, in die der Benutzer neue Werte eingeben kann)
Am im Forum: GUI: Windows-Forms

Mit dem GridControl von DevExpress z.B. geht das. Ist aber kostenpflichtig.

Thema: Exception beim Öffnen des WinForm-Designers
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Du mußt auch berücksichtigen, dass der Designer zum Erstellen und Zeichnen deines UserControls natürlich das UserControls selber erzeugen muß. Das schließt auch mit ein, dass bestimmte Events ausgelöst werden, wie z.B. OnPaint, OnResize usw. Evtl. hast du ein Event in deinem UserControl implementiert, welches zur Designzeit nicht vollständig lauffähig ist oder aber auch gar nicht ausgeführt werden braucht. In diesem Fall kannst du das Property DesignMode abfragen und entsprechend darauf reagieren.

Thema: CodeDOM: temporäre DLL löschen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Kannst du die Assembly nicht einfach im Speicher vorhalten anstelle einer physikalischen Datei?


cp.GenerateInMemory = true;

Thema: komplexe Klasse in XML speichern? [==> serialisieren]
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du könntest eine eigene Collection Klasse erstellen und dieser das XmlRoot Attribute zuweisen.


[XmlRoot("Mappings")]
public class MappingCollection : List<Mapping>
{
}

In deinem Code benutzt du dann MappingCollection anstelle von List<Mapping>.

Thema: Richtige (Werte aus der) User Config beim Update der Anwendung verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich frage mich,warum du die Versionsnummer in einer Config-Datei speicherst. Sie ist ja eigentlich Teil deiner Anwendung.


Assembly.GetExecutingAssembly().GetName().Version

Es sei denn, deine Versionsnummer ist eine eigene Konstruktion, dann nehme ich den Kommentar zurück.