Laden...
Avatar #avatar-3271.jpg
rollerfreak2 myCSharp.de - Member
Software Architekt Dabei seit 14.07.2008 916 Beiträge
Benutzerbeschreibung
Man lernt nie aus...

Forenbeiträge von rollerfreak2 Ingesamt 916 Beiträge

06.04.2009 - 13:15 Uhr

Ich hätte mal eine Frage zu DrawString und Graphics.RotateAt(..)

Ich möchte einen Text in einen bestimmten Winkel zeichnen, angenommen 45 Grad. Nun mach ich das folgendermaßen


Matrix matrix = new Matrix();
matrix.RotateAt(-45, new PointF(20,20));
e.Graphics.Transform = matrix;
e.Graphics.DrawString("test", font, Brushes.Black, 20, 20);
e.Graphics.ResetTransform();

Leider wird der Text sehr sehr schlecht gezeichnet. Kann man das irgendwie verändern, oder muss man spzielle Fonts nehmen?

06.04.2009 - 10:13 Uhr

Ich meine nur es ist (wenn man schon 81 Textboxen initialisiert) besser die dynamisch anzulegen, zumal man die dann gleich in eine List<T> packen kann. Aber ich gebe dir komplett recht, 81 Textboxen sind zuviel, man sollte sich alternativen überlegen

* Eigenes Control
* DataGridView
* ...

06.04.2009 - 10:07 Uhr

Es gibt mein Intialisieren keine großen Unterschied, das war ja auch nicht die Frage oder?

Nur beim iterieren gibt es einen Vorteil, das war ja auch die Frage oder?

06.04.2009 - 09:50 Uhr

Wenn du 81 textboxen hast, dann würd ich die nicht via Designer anlegen sondern dynamisch im Code. Dann kannst du die in eine List<TextBox> einfügen und einfach mit einer


foreach (Textbox textbox in list)...

oder einer for schleife duch iterieren.

03.04.2009 - 08:44 Uhr

Ich muss den Thread noch mal aufreißen. Und zwar hab ich das jetzt auch mal unter Vista getestet und da gibt es Probleme. Und zwar ist der MonthCalendar etwas dynamisch sprich wenn man oben auf das jahr klickt, dann kommt eine Jahresübersicht etc. Zusätzlich wird der unterliegende DateTimePicker _MonthCalendar nicht richtig überdeckt. Wenn ich nun auf das Jahr klicke dann geht der natürlich zu, wegen des ToolStripDropDown's. Also wäre die erste Lösung mit dem MessageSend doch die deutlich bessere. Leider komm ich dort nicht weiter, hat einer ne Idee wieso ich bei dem MessageSend vom SETDAYSTATE immer 0 zurück bekomme?

02.04.2009 - 12:49 Uhr

Das hatte ich gemacht, sprich eine oder verknüpfung mit MCS_DAYSTATE und dann mit MessageSend ans Calender Control. Danach wieder MCM_SETDAYSTATE gesenden und wieder null zurück bekommen. In der MSDN steht da nix hilfreiches dazu. Ich hab mich jetzt einer Notlösung bedient. Ich blocke das popup beim dropdown event, und zeige stattdessen ein MonthCalendar an (wie oben von dir vorgeschlagen), dieser besittz ja eine Eigenschaft (BoldedDates) vom Typ DateTime[].

Hier die Lösung


public class ExtendedDateTimePicker : DateTimePicker
{
    /// <summary>
    /// Overlay dropdown popup.
    /// </summary>
    private ToolStripDropDown m_popup;
    
    /// <summary>
    /// New calendar.
    /// </summary>
    private MonthCalendar m_monthcalendar;

    /// <summary>
    /// Initializes a new instance of the <see cref="ExtendedDateTimePicker"/> class.
    /// </summary>
    public ExtendedDateTimePicker()
    {
        m_monthcalendar = new MonthCalendar();

        m_monthcalendar.DateChanged += new DateRangeEventHandler(DateChanged);

        m_popup = new ToolStripDropDown();
        m_popup.Margin = Padding.Empty;
        m_popup.Padding = Padding.Empty;
        ToolStripControlHost host = new ToolStripControlHost(m_monthcalendar);
        m_popup.Items.Add(host);
    }

    /// <summary>
    /// occours when the date changed.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.Windows.Forms.DateRangeEventArgs"/> instance containing the event da
    void DateChanged(object sender, DateRangeEventArgs e)
    {
        this.Value = m_monthcalendar.SelectionStart;
    }

    /// <summary>
    /// Gets or sets the bolded dates.
    /// </summary>
    /// <value>The bolded dates.</value>
    public DateTime[] BoldedDates
    {
        get
        {
            return this.m_monthcalendar.BoldedDates;
        }
        set
        {
            this.m_monthcalendar.BoldedDates = value;
        }
    }

    /// <summary>
    /// Raises the <see cref="E:System.Windows.Forms.DateTimePicker.DropDown"></see> event.
    /// </summary>
    /// <param name="eventargs">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>
    protected override void OnDropDown(EventArgs eventargs)
    {
        m_monthcalendar.SelectionStart = this.Value;
        m_monthcalendar.SelectionEnd = this.Value;
        int y = this.Height - this.Margin.Bottom;
        this.m_popup.Show(this, 0, y); 
        
        base.OnDropDown(eventargs);
    }


    /// <summary>
    /// Raises the <see cref="E:System.Windows.Forms.DateTimePicker.CloseUp"></see> event.
    /// </summary>
    /// <param name="eventargs">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>
    protected override void OnCloseUp(EventArgs eventargs)
    {
        this.m_popup.Hide();

        base.OnCloseUp(eventargs);
    }
}

01.04.2009 - 17:02 Uhr

Ich hab jetzt nach langem MSDN suchen folgendes Probiert. Leider ohne erfolg.


private const int GWL_STYLE = (-16);
private const int MCM_FIRST = 0x1000;
private const int MCM_SETDAYSTATE = (MCM_FIRST + 8); 
private const int MCM_GETMINREQRECT = (MCM_FIRST + 9);
private const int MCS_WEEKNUMBERS = 0x4;
private const int MCS_DAYSTATE = 0x0001; 
private const int DTM_FIRST = 0x1000;
private const int DTM_GETMONTHCAL = (DTM_FIRST + 8);
private const int WM_PAINT = 0x000f;

[DllImport("User32.dll")]
private static extern IntPtr SendMessage(IntPtr h, int msg, IntPtr param, uint[] data);

protected override void OnDropDown(EventArgs e)
{
    IntPtr monthView = SendMessage(Handle, DTM_GETMONTHCAL, 0, 0);
    uint[] daystate = new uint[3];
    daystate[0] = 15;
    daystate[1] = 15;
    daystate[2] = 15;
    IntPtr result = SendMessage(monthView, MCM_SETDAYSTATE, new IntPtr(3), daystate);
    base.OnDropDown(e);
}

Daystate ist dabei jeweils bitweise zu sehen, sprich 15 heißt die ersten 5 Tage sind boldes. Die Anzahl der Elemnte des Arrays gibt die Monate an. Hier laut MSDN ist daystate[1] der aktuelle Monat, 0 der prev und 2 der next.

Leider funktioniert das nicht, es wird keine monat bolded gezeichnet. 😦

01.04.2009 - 15:59 Uhr

Ich müsste irgendwie den


private const int MCS_DAYSTATE = 0x0001;

mit Hilfe von


private const int MCM_FIRST = 0x1000;
private const int MCM_SETDAYSTATE = (MCM_FIRST + 8); 

ändern in abhängigkeit der BoldesDates...

Wenn ich die externe dll einbinde weiß ich nicht welche SendMessage ich nehmen muss um den DayState zu ändern.


[DllImport("User32.dll")]
private static extern IntPtr SendMessage(....);

Hat einer von euch eine Idee dazu?

01.04.2009 - 15:28 Uhr

Mit den Messages komm ich schon zurecht, nur gibt es ein paar andere Probleme. Ich dachte mir das so, ich füge dem Control eine List<DateTime> object hinzu, nennen wir es mal wie mein monthCalendar boldetDates. Nun fange ich die WM_Paint nachricht ab, und feuer dann z.b. die OnPaint Methode ab.
Problem ist, wenn ich in der OnPaint methode bin, wird ich gern durch alle Tage iterieren die abgebildet sind, und mir einfach das rectangle geben lassen, und dann einfach schauen ob das Datum in meiner Liste enthalten ist, wenn ja einfach anderen Hintergrund malen. Leider hab ich noch keine Idee wie ich dort durch iterieren kann...

01.04.2009 - 09:35 Uhr

Ich hätte mal eine Frage bezüglich des DateTimePicker's. Und zwar wenn man den dropdown Button betätigt, dann geht ja ein Kalender auf, der genauso aufgebaut ist wie der MonthCalendary. Beim MonthCalendary gibt es die option "boldedDate" mit der man spezielle Tage "Fett" machen kann, um hervorzuheben das an diesen Tagen etwas ist. Gibt es irgendeine Möglichkeit das bei dem DateTimePicker auch zu tun, da find ich das nämlich nicht. Vielleicht kann man ja auch die Hintergrundfarbe einzelner Tage ändern.

thx

25.03.2009 - 12:56 Uhr

Ich glaub ich hab den Fehler gefunden. Man darf nicht die X Koordinate fest setzen, sondern trotz das es die 1.Spalte ist von e.Bound.X abhängig machen.

25.03.2009 - 12:41 Uhr

Kleinen Moment, ich muss hier erstmal schnell ein vista zum laufen kriegen. Dann versuch ich das mal zu reproduzieren und hier ein referenz Projekt hoch zu laden.

25.03.2009 - 10:51 Uhr

Hallo zusammen mit ist heut ein Problem aufgefallen welches ich mir nicht erklären kann, und ich euch um Rat frage. Ich habe ein DGV welches aus mehreren Spalten besteht und in eine Form eingebettet ist. Das DGV ist so breit das der HScrollbar aktiv ist. Ich habe im DGV das OnCellPaint so überschrieben das in der 1.Spalte ein Icon in jede Row gezeichnet wird (Graphics.DrawImageUnscaled(...)).

Jetzt zu dem Problem, die Icons (ist nur eins) werden in jede Row gezeichnet, dabei erzeuge ich natürlich nicht jedesmal das Bitmap neu, sondern zeichne immer nur das eine. Wenn ich nun die Scrollbar nach recht verschiebe sodass die 1.Spalte nicht mehr zu sehen ist, dann sind auch die Icons nicht mehr zu sehen. Bis Dahin logisch. Nur jetzt kommt das komische. Verschieben ich nun die scrollbar wieder nach links sodass die 1.Spalte wieder zu sehen ist dann werden die Icons nicht dar gestellt (wichtig nur wenn ich die Pfeile Tasten an der Scrollbar benutze). Verschiebe ich die HScrollbar indem ich sie anfasse und nach links schiebe werden die Icons normal gezeichnet. Unter XP scheint das Problem nicht da zu sein, ich habs grad getestet.

Kann mir das einer erklären bzw. weiß einer woran das liegt?

Man könnte natürlich die HScrollbar so überschrieben das sie jedesmal wenn sie bewegt wird ein Invalidate macht, aber 1. sollte das automatisch vom DGV so implementiert sein und 2. weiß ich nicht ob das Sinnvoll ist.

25.03.2009 - 10:15 Uhr

Mit throw werfen.

24.03.2009 - 15:35 Uhr

Das was du hier fragst gehört zu den absoluten Grundlagen. Wie du ein Array anlegst, was du darin halten kannst und wie du auf Elemente davon zugreifen kannst müsstest du wissen wenn du Programmieren willst, ansonsten empfehle ich dir erstmal ein Buch zu lesen.

23.03.2009 - 13:52 Uhr

Spontan würd ich sagen du musst dir erstmal eine eigene ListView bauen. Dort würd ich dann das onPaint überschreiben und die erst Row filtern. Diese würd ich dann doppelt so hoch zeichnen, und oben deine steuer elemente rein hauen.

23.03.2009 - 08:42 Uhr

Warum soll ich den table ein alias vergeben. UNION ist nur voraussetzung das die columns der Ergebnismenge gleich sind. Also ich hab jetzt folgendes.

Noch mal zum Problem. Der Table enthält zusätzlich eine datums spalte, die auch mit beachtet werden muss. Und die namen werden noch auf ein token überprüft. Ich hab jetzt folgendes aber ich weis nicht ob es performance technisch optimal ist.


"SELECT DISTINCT spieler FROM (" +
"SELECT spieler, datum FROM (" +
"SELECT spieler1 as spieler, datum FROM test UNION" + 
"SELECT spieler2 as spieler, datum FROM test UNION" + 
"SELECT spieler3 as spieler, datum FROM test UNION )" + 
"WHERE (datum BETWEEN @begindate AND @enddate AND spieler like @token);"

Die unions sind nur um eine tabelle mit name und datum zu erhalten. Danach wird die WHERE klausel auf diese Tabelle angewand. Danach muss man die spieler die doppelt sind noch mit DISTINCT entfernen. Kann man das DISTINCT auch auf columns anwenden? Oder nur auf komplette entitäten?

22.03.2009 - 19:23 Uhr

Ich kann dir die db nicht schicken, 150mb groß.
Aber wenn du das Problem verstanden hast, und du meinen select falsch siehst, warum sagst du mir dann nicht die lösung?

22.03.2009 - 19:10 Uhr

Du scheinst es nicht zu verstehen was die query machen soll.
In spieler1 stehen namen, sowie in spieler2 und spieler3.
Ich möchte eine ergebnissmenge haben die alle namen der gesamten table auflistet, ohne doppelte.

table
spieler1 spieler2 spieler3 daten1 daten2 bla bla
egon uli hans ...
uli tom hans ....
egon thomas robin

Ergebniss soll eine Liste sein, mit

egon, uli, hans, tom, thomas, robin

hast du es nun verstanden was ich meine bzw. will?

22.03.2009 - 18:30 Uhr

Mhh ich versteh dich nicht. Logisch selectiere ich den spieler1, ebenso den Spieler2 und acuh den spieler3. Diese Columns befinden sich alle in einer Tabelle hier table genannt. Ich will aus dieser Table ersteinmal alle namen in einer ergebnisstabelle haben. Die 2 Tabelle enthält dann auch noch mal 2 spieler columns, aber wenn ich die Query für die erste table habe, sprich alle namen meiner tabelle (aber keine doppelt) dann ist die kombination aus allen namen der 1.ten und 2.ten Tabellen ja kein problem mehr.

Wie würdest du denn alle Namen aus einer Table genannt "testtable" mit unter anderem 3 Spalten "spieler1" "spieler2" "spieler3" auslesen?

22.03.2009 - 15:51 Uhr

Was meinst du, drück dich bitte etwas genauer aus. Den ich referenziere doch eine Tabelle "table" und von der die columns spieler1 spieler2 und spieler3.

Hast du meinen Thread überhaupt richtig gelesen?

22.03.2009 - 10:53 Uhr

Ich hab das Probiert nur hab ich da ein Problem und eins ist mir unlogisch.


command.CommandText = "SELECT DISTINCT spieler FROM (SELECT spieler1 AS spieler FROM table1 UNION SELECT spieler2 AS spieler FROM table1 UNION SELECT spieler3 AS spieler FROM table1) WHERE spieler like @token;";

1.Problem
Die UNIONS mergen ja schon alle Datensätze zusammen, obwohl das doch eigentlich ineffizent ist, denn kann man die WHERE BEdingung nicht gleich in die UNIONs einbauen?

2.Problem
Es gibt in der Ergebnissmenge doppelte Einträge, das ist doch eigentlich gar nicht möglich STCIHWORT -> DISTINCT

21.03.2009 - 12:44 Uhr

verwendetes Datenbanksystem: <SQLite>

Ich hab ein problem bei einer DB Query. Ich habe 2 Tables die aus mehreren Spalten bestehen. Table1 hat column "name1" und "name2" und Table2 hat column "name1" und "name2" und "name3".

Sind in beiden Tables mehrere entyties, mit mehreren namen. In einer entity ist jeder name distinct, sprich name1 ist imme unterschiedlich zu name2 und name3. Aber Trotzdem können im Table selber namen doppelt vorkommen.

Nun möchte ich aus beiden Tables alle vorhandenen Namen wissen, dabei soll aber keiner doppelt vorkommen. Ich komm aber nicht auf die Query. Kann mir einer helfen?

20.03.2009 - 11:11 Uhr

Du musst doch nur den Classname ändern und dann auf refactor->rename all gehen. Oder vertseh ich dich falsch?

20.03.2009 - 11:03 Uhr

Ich würde so was auch gut bebrauchen können. Es reicht ja schon beim compare in der Textbox auch auf substrings zu überprüfen. Dazu müsste man nur die Textbox überschrieben und den vergleich selber vornehmen. Dazu allerdings müsste man wissen wo man anpacken muss, ich bin grad auf der suche danach.

Den wie jaensen geschrieben hat wird es denke ich nicht funktionieren, denn die wildcards muss ja die Textbox beherschen, bzw. die Compare funktion dieser. In DB's geht das zwar, aber soweit ich weiß kann die AutoCompletion nur mit einfach String vergleichen arbeiten.

20.03.2009 - 09:37 Uhr

Da frag ich mich doch wie du es hin bekommst eine DB aus zu lesen, aber nicht weist wie man die Anzahl der Zeichen einer Zeichenkette bekommt?

20.03.2009 - 09:16 Uhr

Ich versteh dich nicht, du kannst doch einfach die division auf int casten.

Zusätzlich sei erwähnt es gibt schon fertige funktionen mit der du den Wochentag eines Datums raus bekommst. Siehe dazu die DateTime Methode.

Und ein modulo operator gibt es doch auch in c# => %

int x = 5 % 3;
x->2

18.03.2009 - 16:35 Uhr

Bau dir eine eigene die so aussieht wie die unter vista. Dann sieht sie auf jedem System so aus. Wenn du die standart nimmst MessageBox und das unter vista ausführst sieht die ja so aus. Nur unter XP hat sie halt den xp style.

18.03.2009 - 11:20 Uhr

Du kannst auch an der DropDownList2 den selectedindex programmatisch ändern, sprich ändern und dann sofort wieder zurück setzen, dann wird automatisch der Handler dazu aufgerufen. Ist allerdings unsauber.

Du kannst auch den Handler so aufrufen, nur musst du dann die richtigen Eventargs beachten. besser wäre wie juetho bereits erwähnt hat eine methode aufzurufen, die auch der Handler von DripDownList2 aufruft.

18.03.2009 - 08:57 Uhr

Das wusste ich gar nicht das dass geht, besten dank

17.03.2009 - 15:56 Uhr

Naja du erstellst die Source also deine AutoCompleteStringCollection immer wieder neu. Das heißt die ist sowieso leer, und du musst sie nicht leeren wie ich erst geschrieben habe. Deswegen schrieb ich hab ich übersehen...

17.03.2009 - 15:15 Uhr

Da hast du recht...übersehen

17.03.2009 - 14:29 Uhr

Ohne jetzt den genauen Quellcode zu sehen, kann es sein das du bevor du AddRange auf die source anwendest, vergisst die alten inhalte zu löschen?

17.03.2009 - 08:52 Uhr

ich würde aber nicht den Namen der Subitems statisch setzen.

Wieso nicht? Die Column3 bleibt nun mal die Column3 auch wenn es Row 5 oder Row 6 oder Row 7 ist, und wenn Column3 "blabla" heißt, dann heißt sie für jedes Item der ListView "blabla"...

16.03.2009 - 08:30 Uhr

Du musst nach jedem einfügen die SubItems mit dem richtigen Key versorgen. Wenn du zum Beispiel ein ListviewItem mit 3 Columns einfügst, dann rufst du nach dem einfügen z.b. das auf.


listview1.Items.Add(new String[] { "bla", bla1", "bla2" });
SetSubItemNames(lsitview.Items[listview.Items.Count - 1]);


private void SetSubitemNames(ListViewItem item)
{
    item.SubItems[0].Name = "col1";
    item.SubItems[1].Name = "col2";
    item.SubItems[2].Name = "col3";
}

Danach kannst du in dem Item mit keys auf die SubItems zugreifen.

12.03.2009 - 10:58 Uhr

Code in deiner Form...



private string text;
private int number;

public Form1(int number, string text)
{
    this.number = number;
    this.text = text;
}

Code in der Main Methode


Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(10, "ich sollte mal ein C# Buch lesen..."));

Danach hast du die Varaiablen in deiner Form, aber warum willst du das so machen???

12.03.2009 - 10:18 Uhr

Du sagtest du konntest es lösen, was war den nun der Fehler?

12.03.2009 - 09:03 Uhr

Dafür nimmst du am besten den progressbar von codeproject hier. Der allerdings ist von Control abgeleitet, und wie ich gestern gelernt habe bekommst du den nicht einfach so in ein ToolStripContaine rein. Ansonsten ist der echt klasse, zumal der seinen Style behält.

12.03.2009 - 08:53 Uhr

Nein passen sie nicht. Das weis ich auch. Aber unter Xp und Vista kann man ja mit eigenenen Controls dafür sorgen das es so ist, oder nicht?

11.03.2009 - 16:23 Uhr

Ja weil erstens sieht der auf jedem System anders aus. Zweitens gibt es da kein AnimateBar, weil ich in meine Anwendung einige Sachen habe von denen man die Zeit der Anforderung nicht abschätzen kann, also dem User nur anzeigen kann das etwas arbeitet. Und ein eigener Progressbar sieht immer gleich aus, auf jedem System.

Den ToolStripProgressBar hab ich aktuell in benutzung, aber den möchte ich ersetzen...

11.03.2009 - 15:18 Uhr

Mhhh, das ist nicht gut. Dann wird es sicher einfacher einen ToolStripContainer zu bauen wo ich auch die Progressbar rein packen kann. Danke für die Info

11.03.2009 - 15:05 Uhr

Ich hab mal eine Frage bezüglich dieser ProgressBar. Wenn ich die in einen ToolStripContainer integreieren will (um so eine Art Statusbar zu haben) dann kann ich die nicht Adden weil alles Controls die ich adden möchte vom Typ ToolStripItem sein müssen. Wie kann ich das lösen bzw. umgehen, hat da einer von euch eine Idee. Am besten ohne ein eigenen ToolStripContainer zu schreiben... 😃

11.03.2009 - 14:14 Uhr

Stimmt das hab ich gar nicht bedacht. Man kann den Text zwar abfangen im TextChangeEvent, nur hat der dort den Text schon ab NewLine abgeschnitten. Dann ist das wohl mit dem abfangen der WM_PASTE Message in einer überschriebenen TextBox Klasse die einzige Lösung...

11.03.2009 - 12:35 Uhr

Hab ich übersehen 😃 Danke

11.03.2009 - 09:24 Uhr

Den text kannst du vorher im TextChangeEvent manipulieren und validieren.


textBox.TextChanged += new EventHandler(textBox1_TextChanged);


void textBox_TextChanged(object sender, EventArgs e)
{
    //do validation
}

Hab ich dich richtig verstanden oder meinstest du etwas anderes...?

11.03.2009 - 09:20 Uhr

Poste doch mal die fehlermeldung bzw. die Exception die kommt... Dann weis man eventuell mehr, ich denk Programmierhans hat eventuell recht das du die Handler nicht abhängst aber die Objekte disposed.

09.03.2009 - 14:19 Uhr

Ich muss dir recht geben SeeQuark, das ist deutlich sinnvoller wenn man sich von Control ableitet.
Und die unten aufgeführten Sachen sind alle nachfolziehbar...! Nice

09.03.2009 - 12:24 Uhr

Du könntest es Beispielsweise so machen. Du baust die eine eigene PictureBox die du EllipseBox nennst oder sowas und leitest dich von PictureBox ab.
Und dort drin hälst du deine member und deine Methoden. Vereinfacht etwa so.


    public class ellips : PictureBox
    {
        //private members
        private int height;
        private int width;

        public ellips()
        {
            this.width = 0;
            this.height = 0;
        }

        public void SetEllipse(int width, int heigth)
        {
            this.height = height;
            this.width = width;
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            this.Handle = true;
            pe.Graphics.FillEllipse(Brushes.Red, 25, 25 , this.width, this.height);
            //base.OnPaint(pe);
        }

Dann baust du in deine From anstatt der PictureBox deine EllipseBox ein. Wenn du die Scrollbar bewegst musst du dann noch im Handler dazu die SetEllipse aufrufen und dort dann die aktuelle breite und höhe setzen. Ist nur vereinfacht dargestellt.

09.03.2009 - 11:04 Uhr

Ich weis nicht ich versteh dein Problem nicht so ganz. Ich hätte das ein bisschen anders gemacht. Ich hätte die Zeit mit TimeSpan ausgerechent sprich in Sekunden. Diese Zeit weist du dem maximum der progressbar zu. Nun merkst du dir mit DateTime.Now die Zeit zum Start Zeitpunkt. Den einen Timer von 1000ms also 1er Sekunde brauchst du dann nur um ein event zu feuern in dem du dann die Progressbar aktuallisierst. Im Event machst du dann einfach wieder DateTime.Now rechnest die difference in Sekunden aus zum anfangs gemerkten DateTime.Now und weist diese Sekundenzahl direkt dem Value der Progressbar zu.

Wenn du noch die Tage, Stunden, Minuten, und sekunden separat anzeigen willst, dann musst du dort nur noch die Sekunden wieder zurück covertieren. Tipp: Schau dir mal die TimeSpan Klasse an, du musst das nicht alles selber rechnen, es gibt für solche Sachen meistens schon vorgefertigte Funktionen auf die du bequem zurüclgreifen kannst.

Dies zum beispiel solltest du verwenden um Sekunden in eine Zeit zu wandeln.


TimeSpan span = new TimeSpan(TimeSpan.TicksPerSecond * 10000);

Ist die Zeit von 10000 Sekunden umgerechnet in hh:mm:ss

05.03.2009 - 15:52 Uhr

Das ist eine gute Frage, weil ich das nicht wusste 😃

Aber ich schaus mir mal an, da kann man das sicher leichter und komfortabler realisieren.

Danke dir.