Laden...

Forenbeiträge von Gwinn Ingesamt 47 Beiträge

08.03.2015 - 16:42 Uhr

Ist jetzt nicht schön, sollte aber funktionieren.
Das Zauberwort dabei ist Rekursion.


        static List<string> ausgabestring(string prefix, int startindex, List<string> obst)
        {
            List<string> weniger_obst=new List<string>(obst);

            List<string> output=new List<string>();
            if (obst.Count > 0)
            {
                weniger_obst.RemoveAt(0);
                for (int i = startindex; i <= 2; i++)
                {
                    output.AddRange(ausgabestring(prefix + " " + obst[0] + " " + i, i, weniger_obst));
                }
            }
            else 
                output.Add(prefix);
            return output;
        }

Gruß Gwinn

02.04.2013 - 10:13 Uhr

Hi diana,

wenn du den string f nicht weiter benötigst, könntest du es mit:


if (e.Index == -1) return;

e.DrawBackground();
Brush brush;

string text = ((ComboBox)sender).Items[e.Index].ToString();

if (text.IndexOf((char)185)>=0)
   brush = Brushes.Red;
else
   brush = Brushes.Black;

e.Graphics.DrawString( text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y); 

probieren.

Ansonsten hilft dir vielleich tein Blick in [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)
und den darin verlinkten Artikeln.

21.03.2013 - 09:48 Uhr

Hi Tactive,

probiers mal mit


<Trigger Property="IsMouseOver" Value="True">

Gruß Gwinn

11.01.2013 - 08:37 Uhr

Hi Coffeebean,

das Sortiern der Liste A ist - glaub ich - nicht das Problem für cDAG, sondern, dass in den anderen Listen dieselbe 'Reihenfolgeveränderung' durchgeführt werden soll.

Offensichtlich stehen die Daten in den Listen in einem inhaltlichen Zusammenhang. Spricht denn etwas dagegen, einfach eine Klasse zu definieren, die die Daten zusammenfasst und diese zu sortieren?

Gruß Gwinn

10.01.2013 - 10:24 Uhr

Hi und willkommen im Forum.

ich nehme an, dass du diese Stelle meinst:


if (((AkP < 2) || (AkP == 0)) && (Double_Tripple != 1))

setze an der Stelle einen Haltepunkt, lass dir die Werte deiner Variaben anzeigen (überwachen) und führe das Programm schrittweise weiter aus.
Dann weißt du, was dein Programm macht und warum es das tut.

Im übrigen ergibt die Bedingung:


((AkP < 2) || (AkP == 0))

keinen Sinn, weil AkP==0 immer erfüllt ist, wenn AkP<2 wahr ist.

Im Übrigen ist es für uns schwer einen logischen Fehler zu finden, ohne zu wissen, was das Programm überhaupt machen soll.

Gruß Gwinn

04.12.2012 - 10:37 Uhr

Hi camelord,

warum machst du keinen Export deiner ModuleBase, wenn du deren Implementation benötigst?


[Export(typeof(Contracts.ModuleBase))]
    public class ModuleTouchdata : Contracts.ModuleBase
    {
        [...]
    } 

Gruß Gwinn

10.10.2012 - 15:33 Uhr

Hi Community,

ich bin leider erst mit etwas Verzögerung dazu gekommen, mir die Lösungen anzusehen.
Funktionieren tun beide. Die Lösung von D4rkScr43m läuft dabei wesentlich performanter ab (auch als meine Lösung).
Da seine Lösung zudem etwas schneller kam, erhält er den Zuschlag für die nächste Aufgabe.

Gruß Gwinn

08.10.2012 - 18:04 Uhr

Hallo Community,

da wir zuvor schon bei einer Springeraufgabe waren, hier meine Aufgabe:

Gesucht ist eine Funktion, die einen Lösungsweg für das Springerproblem für ein 8x8 Feld liefert.
Als Parameter soll die Funktion die Koordinaten des Startfeldes empfangen.

Viel Spaß

Gwinn

Edit: Um die Laufzeit nicht zu sehr in die Höhe zu treiben soll es genügen, wenn als Startpunkt eine Ecke vorgegeben wird.

08.10.2012 - 12:40 Uhr

Hi herbivore,

ich hoffe ich habe keine Fehlerquellen übersehen.
Ungültige Argumente führen in meiner Version zu einer entsprechenden Exception.
Die Funktion nimmt als Argumente nichtnegative Zahlen und Basen von 2 bis 62.
Statt einer Exception könnte man auch den Ausgabestring entsprechend ändern. In Hinblick auf eine Anwendung gehe ich jedoch davon aus, dass man zuerst an dem Ergebniss der Berechnung interessiert ist. Deshalb habe ich als Rückgabewert die Quersumme gewählt und schreibe den Ausgabestring in den Parameter str.


        public static int Quersumme(Int32 zahl, Int32 basis, out String str)
        {
            Int32 quersumme = 0;
            Int32 ziffer;
            StringBuilder strbuilder = new StringBuilder();
            Int32 restzahl = zahl;
            if ((basis > 62) || (basis < 2))
                throw new ArgumentOutOfRangeException("Die Basis muss zwischen 2 und 62 liegen.");
            if (zahl < 0)
                throw new ArgumentOutOfRangeException("Die Quersumme ist nur für natürliche Zahlen definiert.");
            while (restzahl > 0)
            {
                ziffer = restzahl % basis;
                quersumme += ziffer;
                if (ziffer < 10)
                    strbuilder.Insert(0, ziffer);
                else
                    if (ziffer > 35)
                        strbuilder.Insert(0, (char)(ziffer + 61));
                    else
                        strbuilder.Insert(0, (char)(ziffer + 55));
                restzahl = (restzahl - ziffer) / basis;
            }
            str = zahl.ToString() + "= " + strbuilder.ToString() + " base " + basis.ToString() + " -> Quersumme " + quersumme.ToString();
            return quersumme;
        }

Gruß Gwinn

08.10.2012 - 08:08 Uhr

Da ich bis jetz noch keine 'schöne' neue Aufgabe habe, gebe ich die Aufgabenstellung einfach mal frei.

Wer also eine neue Aufgabe stellen möchte, sei herzlich dazu eingeladen, das zu tun.

Gruß Gwinn

04.10.2012 - 12:58 Uhr

Also,


        public static DateTime EndOfDay(this DateTime day)
        {
            return (day.AddDays(1)).Date;
        }

        public static TimeSpan SubtractEx( DateTime start, DateTime end, Dictionary<DayOfWeek, IList<TimeSpan>> timelist)
        {
            bool negativ = false;
            if (end < start)
            {
                DateTime tmp = start;
                start = end;
                end = tmp;
                negativ = true;
            }

            IList<TimeSpan> todaysList;

            Dictionary<DayOfWeek, TimeSpan> timespanPerDay = new Dictionary<DayOfWeek, TimeSpan>();
            TimeSpan helperTimeSpan;
            TimeSpan timespanPerWeek=new TimeSpan();
            foreach (DayOfWeek dayofweek in Enum.GetValues(typeof(DayOfWeek)))
            {
                timelist.TryGetValue(dayofweek,out todaysList);
                helperTimeSpan = new TimeSpan();
                if (todaysList != null)
                {
                    for (int i = 0; i < todaysList.Count; i += 2)
                    {
                        helperTimeSpan += todaysList[i + 1] - todaysList[i];
                    }
                    timespanPerDay.Add(dayofweek, helperTimeSpan);
                    timespanPerWeek += helperTimeSpan;
                }
            }

            int fulldays=(end.Date - start.EndOfDay()).Days;
            int fullweeks = (int)Math.Floor(fulldays / 7.0);
            TimeSpan result = new TimeSpan(fullweeks*timespanPerWeek.Ticks);

            DateTime calcend = end.Subtract(new TimeSpan(fullweeks*7,0,0,0));

            DateTime time = start;
            timelist.TryGetValue(time.DayOfWeek,out todaysList);
            if (todaysList != null)
            {
                for (int i = 0; i < todaysList.Count; i += 2)
                {
                    if (time.TimeOfDay<=todaysList[i])
                        result+=(todaysList[i+1]-todaysList[i]);
                    else
                        if (time.TimeOfDay<todaysList[i+1])
                            result+=(todaysList[i+1]-time.TimeOfDay);
                }
            }
            time = time.AddDays(1);
            while (time.Date < calcend.Date)
            {
                if (timespanPerDay.TryGetValue(time.DayOfWeek, out helperTimeSpan));
                    result += helperTimeSpan;
                time = time.AddDays(1);
            }
            time=calcend;

            timelist.TryGetValue(time.DayOfWeek, out todaysList);

            if (todaysList != null)
            {
                for (int i = 0; i < todaysList.Count; i += 2)
                {
                    if (todaysList[i+1]<calcend.TimeOfDay)
                        result+=(todaysList[i+1]-todaysList[i]);
                    else
                        if (todaysList[i]<calcend.TimeOfDay)
                            result +=(calcend.TimeOfDay - todaysList[i]);
                }
            }
            if (negativ)
                result = -result;
            return result;
        }

Das liefert jetz mit einer Ausnahme deine Testergebnisse zurück.

DateTime.Substract liefert nämlich nicht 0, sondern einen negativen Wert, falls das Enddatum vor dem Startdatum liegt.

Gruß Gwinn

04.10.2012 - 11:10 Uhr

Hallo,

ich hab mal an der Performance gearbeitet...


        public static DateTime EndOfDay(this DateTime day)
        {
            return (day.AddDays(1)).Date;
        }

        public static TimeSpan SubtractEx( DateTime start, DateTime end, Dictionary<DayOfWeek, IList<TimeSpan>> timelist)
        {
            if (end < start)
                throw new ArgumentException("Das Enddatum muss nach dem Startdatum liegen.");

            IList<TimeSpan> todaysList;

            Dictionary<DayOfWeek, TimeSpan> timespanPerDay = new Dictionary<DayOfWeek, TimeSpan>();
            TimeSpan helperTimeSpan;
            TimeSpan timespanPerWeek=new TimeSpan();
            foreach (DayOfWeek dayofweek in Enum.GetValues(typeof(DayOfWeek)))
            {
                try
                {
                    todaysList = timelist[dayofweek];
                }
                catch (KeyNotFoundException)
                {
                    todaysList = null;
                }
                helperTimeSpan = new TimeSpan();
                if (todaysList != null)
                {
                    for (int i = 0; i < todaysList.Count; i += 2)
                    {
                        helperTimeSpan += todaysList[i + 1] - todaysList[i];
                    }
                    timespanPerDay.Add(dayofweek, helperTimeSpan);
                    timespanPerWeek += helperTimeSpan;
                }
            }

            int fulldays=(end.Date - start.EndOfDay()).Days;
            int fullweeks = (int)Math.Floor(fulldays / 7.0);
            TimeSpan result = new TimeSpan(fullweeks*timespanPerWeek.Ticks);

            DateTime calcend = end.Subtract(new TimeSpan(fullweeks*7,0,0,0));

            DateTime time = start;
            try
            {
                todaysList = timelist[time.DayOfWeek];
            }
            catch (KeyNotFoundException)
            {
                todaysList = null;
            }
            if (todaysList != null)
            {
                for (int i = 0; i < todaysList.Count; i += 2)
                {
                    if (time.TimeOfDay<=todaysList[i])
                        result+=(todaysList[i+1]-todaysList[i]);
                    else
                        if (time.TimeOfDay<todaysList[i+1])
                            result+=(todaysList[i+1]-time.TimeOfDay);
                }
            }
            time = time.AddDays(1);
            while (time.Date < calcend.Date)
            {
                result += timespanPerDay[time.DayOfWeek];
                time = time.AddDays(1);
            }
            time=calcend;

            try
            {
                todaysList = timelist[time.DayOfWeek];
            }
            catch (KeyNotFoundException)
            {
                todaysList = null;
            }
            if (todaysList != null)
            {
                for (int i = 0; i < todaysList.Count; i += 2)
                {
                    if (todaysList[i+1]<calcend.TimeOfDay)
                        result+=(todaysList[i+1]-todaysList[i]);
                    else
                        if (todaysList[i]<calcend.TimeOfDay)
                            result +=(calcend.TimeOfDay - todaysList[i]);
                }
            }
            return result;
        }
    }

Ich hoffe das genügt jetzt deiner Aufgabenstellung...

Gruß Gwinn

02.10.2012 - 13:57 Uhr

Oups,

da hatte ich mich an die Bearbeitung gemacht, bevor ich alles gelesen hatte. Ich werd mich später am Tag damit nochmal befassen...

Gruß Gwinn

02.10.2012 - 12:09 Uhr

Hi,

folgender Ansatz ist zumindest durch meine Tests gelaufen:


        public static TimeSpan SubtractEx( DateTime start, DateTime end, Dictionary<DayOfWeek, IList<TimeSpan>> timelist)
        {
            if (end < start)
                throw new ArgumentException("Das Enddatum muss nach dem Startdatum liegen.");
            DateTime time = start;
            TimeSpan result = new TimeSpan();

            IList<TimeSpan> todaysList;

            DateTime endofday;
            bool lastday = false;
            bool firstday = true;

            while (time < end)
            {
                todaysList = timelist[time.DayOfWeek];
                endofday = new DateTime(time.Year, time.Month, time.Day + 1);
                if (endofday > end)
                    lastday = true;
                if (todaysList != null)
                {
                    for (int i = 0; i < todaysList.Count; i += 2)
                    {
                        if (firstday)
                        {
                            if (time.TimeOfDay >= todaysList[i])
                            {
                                time = time.Subtract(todaysList[i]);
                                firstday = false;
                            }
                            else
                                if (time.TimeOfDay<todaysList[i+1])
                                    time = time.Subtract(time.TimeOfDay);
                        }
                        time = time.Add(todaysList[i]);
                        if (!lastday)
                        {
                            result = result.Add(todaysList[i + 1] - time.TimeOfDay);
                        }
                        else
                        {
                            if (time > end)
                                break;
                            result = result.Add(((todaysList[i + 1] < end.TimeOfDay) ? todaysList[i + 1] : end.TimeOfDay) - time.TimeOfDay);
                        }
                        time = time.Subtract(time.TimeOfDay);

                    }
                }
                time = endofday;
                firstday = false;
            }
            return result;
        }

Gruß Gwinn

18.07.2012 - 22:47 Uhr

Hi MorphieX,

spendier deinem EventHandler noch ein

e.Handled=true;

Dann sollte es auch klappen.


private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
     AddTabItem();
     e.Handled = true;
}

Gruß Gwinn

23.03.2012 - 13:39 Uhr

Hi gijoe222,

eine halbe Lösung wäre es, das ganze nicht als Währung zu formatieren sondern als Zahl mit vorgestelltem Dollarzeichen.

$ #.##0,00

Eine halbe Lösung ist es deswegen, weil du dann noch immer einen Tausenderpunkt und ein Dezimalkomma hast und nicht andersherum, wie es in den USA richtig wäre.

Gruß Gwinn

12.03.2012 - 23:38 Uhr

Hi Blogger,

dein Fehler steckt in diesem Block:


                    for (uint x = 1; x <= y; x++)
                    {
                        facy = fack * x; // Fakultät von (n-i) wird berechnet.

                    }

Es müsste heißen:

                    for (uint x = 1; x <= y; x++)
                    {
                        facy = facy * x; // Fakultät von (n-i) wird berechnet.

                    }

Dann funktioniert es auch mit deinem Quellcode. Das hättest du mit Hilfe von ein paar Haltepunkten und dem Debugger auch herausfinden können.

Darüber hinaus wirst du bei größerem n auf Grenzen stoßen, weil die Fakultäten die du berechnest schnell zu einem Speicherüberlauf führen werden. Für den Binomialkoeffizienten brauchst du auch gar nicht die ganze Fakultät, sondern nur das produkt der ersten (oder letzten, je nach dem ob man mit 1 oder mit n zu multiplizieren beginnt) i Glieder. Da darfst du dir aber selbst mal Gedanken machen...

Gruß Gwinn

17.02.2012 - 17:12 Uhr

Hi spike1302,

das was du beschreibst könnte ggf. die Folge eines Gimbal Lock sein.
Vermeiden kannst du das, indem du die Rotation statt mit einer 3D-Rotationsmatrix mit einem Quaternion berechnest.

Eine Anleitung dazu findest du z.B. im Quaternion Tutorial.
Auch wenn es dort um die Rotation des Objekts und nicht der Kamera geht...

Gruß Gwinn

14.02.2012 - 12:13 Uhr

Hi SHaThaL,

bist du sicher, dass du die rictige Funktion benutzt?
spline2dbuildbicubic ist gedacht für Splines in zwei Veränderlichen (Ordinaten x und y) So wie es mir aber scheint, möchtest du aber auf eine Funktion in einer Veränderlichen fitten und müsstest dafür
spline1dbuildcubic benutzen.

Gruß Gwinn

25.01.2012 - 09:05 Uhr

Hi 1nf1n1ty,

dieser Code erstellt ein leeres Worksheet, in dem die erste Zeile eingefroren ist.
Der Knackpunkt dabei ist die Pane, die in die SheetView eingefügt wird.


            Worksheet worksheet1 = new Worksheet() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x14ac" } };
            worksheet1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
            worksheet1.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
            worksheet1.AddNamespaceDeclaration("x14ac", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac");
            SheetDimension sheetDimension1 = new SheetDimension() { Reference = "A1" };

            SheetViews sheetViews1 = new SheetViews();

            SheetView sheetView1 = new SheetView() { TabSelected = true, WorkbookViewId = (UInt32Value)0U };
            Pane pane1 = new Pane() { VerticalSplit = 1D, TopLeftCell = "A2", ActivePane = PaneValues.BottomLeft, State = PaneStateValues.Frozen };
            Selection selection1 = new Selection() { Pane = PaneValues.BottomLeft, ActiveCell = "F8", SequenceOfReferences = new ListValue<StringValue>() { InnerText = "F8" } };

            sheetView1.Append(pane1);
            sheetView1.Append(selection1);

            sheetViews1.Append(sheetView1);
            SheetFormatProperties sheetFormatProperties1 = new SheetFormatProperties() { BaseColumnWidth = (UInt32Value)10U, DefaultRowHeight = 12.75D, DyDescent = 0.2D };
            SheetData sheetData1 = new SheetData();

            worksheet1.Append(sheetDimension1);
            worksheet1.Append(sheetViews1);
            worksheet1.Append(sheetFormatProperties1);
            worksheet1.Append(sheetData1);

            worksheetPart1.Worksheet = worksheet1;

Um auf diesen Code zu kommen, kannst du dir einfach ein Excel-Dokument erstellen, das die von dir gewünschte Form hat, und dann mit dem Open XML SDK Productivity Tool den Code dazu erstellen lassen (Reflect Code).

Gruß Gwinn

28.11.2011 - 12:00 Uhr

Hi Disaster2k,

Ich hab das Probiert mit lauter rectangles. Allerdings können das sehr viele Quadrate werden und dann läuft das nicht mehr flüssig.

Ich sehe da das Problem nicht, wenn du bei Rectangles die Ereignisse MouseEnter und MouseLeave abfängst und jeweils die Füllung änderst.


        Color lastcol;
        private void Rectangle_MouseEnter(object sender, MouseEventArgs e)
        {
            Rectangle rect = sender as Rectangle;
            SolidColorBrush brush=rect.Fill as SolidColorBrush;
            lastcol = brush.Color;
            brush.Color=Color.Multiply(lastcol,2f);
        }

        private void Rectangle_MouseLeave(object sender, MouseEventArgs e)
        {
            Rectangle rect = sender as Rectangle;
            rect.Fill = new SolidColorBrush(lastcol);
        }

Du musst ja nicht alle Felder neuzeichnen, sondern nur die Felder, die du mit der Maus überfährst.

Gruß Gwinn

23.11.2011 - 00:41 Uhr

Hi X1C3,

da steckt garkein Vodoo hinter. Setz doch einfach mal einen Haltepunkt in die Zeile, die den Fehler auswirft und lass den Debugger starten.
Die ersten beiden Ebenen laufen ohne weiteres durch, doch dann kommst du in der dritten Ebene auf author:
author hat ein Child, nämlich "Gambardella, Matthew". Das Progemm läuft also in den Block der If-Bedingung und versucht dort auf das erste Element der Attributes-Liste zuzugreifen. author hat aber gar keine Attribute. Deshalb liefert Attributes null zurück und der Zugriff auf Attributes[0] schlägt fehl, was dir der Debugger mit> Fehlermeldung:

System.NullReferenceException: Object reference not set to an instance of an object.

um die Ohren haut.

Bevor du also um Hilfe schreist, was denn falsch gelaufen sein könnte, bemüh doch erst einmal die Bordmittel von VisualStudio.

Gruß Gwinn

(Edith ist heute einfach zu müde...)

22.11.2011 - 12:14 Uhr

Hi Bi0logiCaL,

zunächst einmal funktioniert es bei mir, wenn ich HideSelection auf false setze.

Wenn das bei dir aber absolut nicht will (warum auch immer) hätte ich sonst noch einen Workaround für dich.

Du setzt einfach bei jeder Änderung der Auswahl manuell die Farben:


        private TreeNode _selected = null;
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (_selected != null)
            {
                _selected.ForeColor = SystemColors.ControlText;
                _selected.BackColor = treeView1.BackColor;
            }
            _selected=treeView1.SelectedNode;
            _selected.ForeColor = SystemColors.HighlightText;
            _selected.BackColor = SystemColors.Highlight;
        }

Gruß Gwinn

[Edith schreibt] Alternativ kann man natürlich auch den Code auf das Leave und das Enter Ereignis aufteilen, dann wird der Farbwechsel nur durchgeführt, wenn das TreView den Fokus erhält bzw verliert.

22.11.2011 - 10:01 Uhr

Hi,

zu Canoonet hab ich folgendes in den AGBs gefunden:

Urheberrecht

Sämtliche Rechte an der im Rahmen dieses Online-Angebots entwickelten Software, den zugrunde liegenden Datenbanken und sonstigen Inhalten liegen bei der Canoo Engineering AG, soweit nicht ausdrücklich ein anderer Urheber oder Rechtsinhaber genannt wird. Die Rechte der Inhalte des Bedeutungswörterbuchs liegen bei der Universität Tübingen. Jede Verwendung der Software, der Daten oder der sonstigen Inhalte außer in der Form, wie sie unter
>
angeboten und ermöglicht wird, ist nicht erlaubt. Es ist insbesondere nicht gestattet, jedwede Art von Inhalten per Script oder auf andere Weise automatisiert abzufragen.

Eine Scriptabfrage ist also ausdrücklich nicht erlaubt.

Gruß Gwinn

14.11.2011 - 09:34 Uhr

Hi Bernd23,

ich hab mal nen kleinen Workaround dafür geschrieben.
Die Idee ist, im Hauptfenster für den MenuStrip das ItemAdded Ereignis abzufangen und das hinzugefügte Item unsichtbar zu machen.

Damit man überhaupt noch Items hinzufügen kann, hab ich noch ein Steuer-Flag spendiert.


    public partial class Form1 : Form
    {
        private int counter = 0;
        private bool canAddItem = true;
        public Form1()
        {
            InitializeComponent();
            canAddItem = false;
        }

        private void menuStrip1_ItemAdded(object sender, ToolStripItemEventArgs e)
        {
            if (!canAddItem)
                e.Item.Visible = false;
        }
    }

Ich hoffe, du kannst damit etwas anfangen.

Gruß Gwinn

10.11.2011 - 07:55 Uhr

Hi hfb11,

bevor dieser Thread mit Hinweis auf die Forenregeln geschlossen wird, möchte ich dir schnell noch das richtige Stichwort entgegenwerfen:

Das was du suchst, ist die SpecialFolders-Aufzählung.

Gruß Gwinn

08.11.2011 - 10:30 Uhr

Hi VanKurt,

leider scheint es so, dass sich die ListView bei der Verwendung von Gruppen nicht wie erwartet verhält.
Die Items werden nämlich grundsätzlich in der Reihenfolge dargestellt, in der sie der Gruppe hinzugefügt werden und nicht nach der Reihenfolge in der sie in der Items-Auflistung stehen.

Im Übrigen fügt dein Codebeispiel das Item zweimal in die Groups[0] ein. Das erste mal bei der Erstellung und danach noch einmal mit Insert.

Ein Workaround für das Problem wäre, die Gruppe für alle Elemente aus Groups[0] erst auf null zu setzen und danach wieder (in der richtigen Reihenfolge) auf Group[0].


            ListViewItem lvi = new ListViewItem("Item 0");
            listView1.Items.Insert(0, lvi);
            listView1.Groups[0].Items.Insert(0, lvi);

            foreach (ListViewItem item in listView1.Items)
            {
                item.Group = null;
                item.Group = listView1.Groups[0];
            }

@herbivore
Der Code funktioniert bei mir auch, wenn ich ihn im Konstruktor verwende. Wenn ich ihn in eine Funktion schreibe, die später ausgeführt wird, funktioniert es nicht mehr.
Wenn ListView.View auf List gesetzt ist, dann funktioniert der Code auch wie erwartet, doch dann ist ja gerade die Gruppierungsfunktion wieder weg.

29.09.2011 - 09:22 Uhr

Hi Nightmare,

wär es vielleicht eine Möglichkeit, eine eigene Uhrzeitklasse zu schreiben, die bei Programmstart die NTP-Zeit bekommt und eine Stopwatch startet.

Aus der Startzeit und der Stopwatch.Elapsed errechtnet eine Funktion dann die 'richtige' Zeit ohne auf die Systemzeit angewiesen zu sein.

Gruß
Gwinn

21.09.2011 - 10:39 Uhr

Hi Tornado,

ergaänze einfach ein


Points = new List<Point>();

im OnMouseDown Ereignis.

total spiechert nur einen Verweis auf das jeweilige Points-Object, das ihm übergeben wird. deshalb musst du für Points immer eine neue Liste erstellen, wenn du eine neue Linie zeichnen möchtest.

Gruß Gwinn

16.09.2011 - 09:11 Uhr

Hi todo,

ich glaub ich hab erraten, was du suchst.

Du suchst das Ziel eines (Web-)Verweises (im Beispiel test.url) der in einem bestimmten Ordner (d:) liegt. Ist das richtig?


            Shell32.Shell Shell = new Shell32.Shell();

            Shell32.Folder Ordner = Shell.NameSpace(@"d:\");

            Shell32.FolderItem Datei = Ordner.Items().Item("test.url");

            Shell32.ShellLinkObject Verk = (Shell32.ShellLinkObject)Datei.GetLink;

            string Link_Path = Verk.Path;

Alternativ kannst du die Datei (nichts anderes ist es) auch öffnen und den Inhalt auslesen.

Gruß Gwinn

30.08.2011 - 12:07 Uhr

Hallo Xeres,

bist du sicher, dass du mit Tables auf eingebettete Exelobjekte zugreifst?
Ich hab das grad mal ausprobiert und bei mir gibt er nur die Word-Tabellen an.

Auf eingebettete Exceltabellen müsstest du mit InlineShapes zugreifen können.

Gruß Gwinn

06.07.2011 - 23:21 Uhr

Sieh dir den zweiten Link nochmal genau an.
In dem Projekt wird nämlich genau das gemacht.

Den ersten Link hab ich dir nur mit aufgegeben, weil der (über Umwege) zu dem zweiten Beitrag führt.

Gruß Gwinn

06.07.2011 - 10:29 Uhr

Hi Mystique,

das kommt davon, wenn man erst noch ein Beispielprojekt bastelt...

Gruß Gwinn

06.07.2011 - 10:00 Uhr

Hi Levitas,

PS: SuFu und Google natürlich schon benutzt! Hab aber nur Möglichkeiten gefunden, mit DirectSound vom Mikro aufzunehmen. Mehr aber leider auch nicht.

hilfe: directsound aufnehmen durch mikrofon und speichern
und
Sound visualizer in C#

hab ich auf die schnelle gefunden...

Gruß Gwinn

01.07.2011 - 08:43 Uhr

Hi words_sourcecode,

vielleicht hilft dir ja dieses Codesnippet weiter:

http://en.csharp-online.net/HTTP_Post

Gruß Gwinn

20.06.2011 - 08:25 Uhr

Hi Nonsense,

ich würd dir zu 'nem ähnlichen Ansatz raten, wie winSharp ihn schon gemacht hat.
Du hast ja eh schon vor, die Vokabeln mit einem 'Gewicht' (Wert zwischen 0 und 1)zu belegen.
Wenn du dir eine Liste bastelst, in der die Vokabeln hintereinander liegen und bei der die Summe aller Gewichte bis zu dieser Vokabel mit abgespeichert ist, dann kannst du einfach das eine Zufallszahl zwischen 0 und dem Gesamtgewicht ermitteln und nach der entsprechenden Vokabel in der Liste nachschlagen.

Du müsstest dann nur die Bedeutung von 0 und 1 umdrehen zu 0 braucht garnicht mehr geübt zu werden und 1 muss besonders intensiv geübt werden.

Vielleicht hilfts..
Gruß Gwinn

[Edith verschreibt sich gerne mal...]

16.06.2011 - 09:20 Uhr

Hi Red-Sh4nks,

ändere mal Button1.BackgroundImage statt .Image
Das sollte helfen.

Gruß Gwinn

Edit zur Ergänzung:
BackgroundImageLayout bezieht sich, wie der Name schon sagt nur auf das BackgroundImage.
Wenn du unbedingt mit dem Image des Buttons arbeiten willst, dann kannst du auch manuell das Originalbild auf die Größe des Buttons ziehen und zuweisen.

24.05.2011 - 10:20 Uhr

Hi words_sourcecode,

ich hab mir deinen Code jetzt einmal angetan.

Der Hauptfehler ist, dass du beim Rückschritt in der Rekursion die alten Werte nciht zurückschreibst.
Das liegt daran, dass du vorne mit


int[,]  new_values = values;

nicht die Werte, sondern nur den Verweis auf values kopierst und deshalb alle Änderungen genauso auch in values vorgenommen werden.
Verzichte deshalb lieber auf die Kopie und schreib jeweils values[p.X,p.Y] auf 0 zurück.

Als zweites kannst du vollständig auf die äußere Schleife verzichten. Das durchsuchen aller freien Zellen erledigt ja schließlich die Rekursion. Entsprechende ist es auch nicht nötig, die Zellen ++und ++die Zahlen zu mischen und du benötigst nicht in jedem Rekursionsschritt alle freien Felder.

Du solltest ferner darauf verzichten, innerhalb von Schleifen Variablen zu erstellen.

Ich hab mal ein paar Änderungen in deinen Code eingepflegt und mit Kommentaren versehen.
Der Code kann weiter optimiert werden. Z.B. kann du values jetzt als Verweis übergeben und result zum Rückgabewert der Funktion machen, aber das lass ich dir mal noch...


        private int[,] Rekursiv(int[,] values, out bool result)
        {
            // Ergebnis Array
            //int[,] new_values = values; entfernt, da unnötig

            // Freies Feld finden
            Position p=default(Position);
            bool p_found = false;
//            List<Position> free_fields = new List<Position>();
            for (int x = 0; (x < 9)&&!p_found; x++)
                for (int y = 0; y < 9; y++)
                    if (values[x, y] == 0)
                    {
                        p = new Position(x, y);
                        p_found = true;
                        break;
                    }
            // Abbruchbedingung
            if (!p_found)
            {
                result = true;
                return values;
            }
            // Mische Liste
            Random r = new Random();
 
            //Block entfernt, da 'doppelter Zufall' überflüssig ist
/*            for (int i = 0; i < free_fields.Count; i++)
            {
                Position p = free_fields[i];
                int index = r.Next(0, free_fields.Count - 1);
                free_fields[i] = free_fields[index];
                free_fields[index] = p;
            }*/

            // Probiere jede Stelle
            result = false;

            // Äußere Schleife entfernt
//            foreach (Position p in free_fields)

                // Erstelle Zahlen-Array aus 1 bis 9
                int[] free_values = new int[9];
                for (int j = 1; j <= 9; j++)
                    free_values[j - 1] = j;

                // Mische Zahlen
                // Variablendefinition aus der Schleife genommen
                int v,index;
                for (int j = 0; j < free_values.Length; j++)
                {
                    v = free_values[j];
                    index = r.Next(0, free_values.Length - 1);
                    free_values[j] = free_values[index];
                    free_values[index] = v;
                }

                // Probiere jede Zahl
                bool tmp_result;
                foreach (int value in free_values)
                {
                    bool okay = Check(values, p, value);
                    if (okay)
                    {
                        // Hier direkt values beschreiben
                        values[p.X, p.Y] = value;
                        
                        // Rekursiver Aufruf
                        values = Rekursiv(values, out tmp_result);
                        // Alles geklappt? Nein: Nächste Zahl/Nächste Stelle Ja: Abbrechen
                        if (!tmp_result)
                            // Hier values zurücksetzen, falls keine Lösung gefunden wurde
                            values[p.X,p.Y]=0;
                        else
                        {
                            result = true;
                            break;
                        }
                    }

                // entfällt, da die Schleife entfernt wurde
//                if (result)
//                    break;
            }

            // Gebe Ergebnis zurück
            return values;
        } 

23.05.2011 - 08:36 Uhr

Hi words_sourcecode,

ich würde einen anderen Ansatz bei der Generierung wählen:

  • Fülle ein 9x9 Feld wie folgt

   1 2 3  4 5 6  7 8 9
   4 5 6  7 8 9  1 2 3 
   7 8 9  1 2 3  4 5 6 

   9 1 2  3 4 5  6 7 8 
   6 7 8  9 1 2  3 4 5 
   3 4 5  6 7 8  9 1 2
 
   8 9 1  2 3 4  5 6 7
   5 6 7  8 9 1  2 3 4
   2 3 4  5 6 7  8 9 1 

Die s ist ein gültiges Sudoku.

  • Tausche zufällig (mehrfach):
    a) Zeilen/Spalten innerhalb eines 'Dreierblocks' (z.B. erste und zweite Zeile, aber nicht erste und vierte)
    b) komplette 'Dreierblocks' spalten/zeilenweise (z.B. die erten drei Spalten gegen die siebte bis neunte)

Mit dem Ansatz brauchst du nicht 'herumszuprobieren'.

Vielleicht hilfts

Gwinn

11.05.2011 - 09:48 Uhr

Hi AllForOne,

ich habe mal versucht, dein Listing durchzusehen.
In der Sprite.UpdatePosition() erstellst du ein neues Game1-Objekt und rufst dessen Reset() auf.
Ich kann mir nicht vorstellen, dass das so gewollt ist.

Gruß Gwinn

14.04.2011 - 13:23 Uhr

Hallo Christel,

probier mal


            tsb.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
            tsb.TextImageRelation = TextImageRelation.TextAboveImage;

zu setzen. Bei mir funktioniert es so.

Gruß Gwinn

08.04.2011 - 12:22 Uhr

Hi moelski,

die meldung kommt von ReSharper.
In deinem Beispiel wird test ausschließlich im Scope der Schleife benutzt - daher der Hinweis auf den inner scope.
Ob dies tatsächlich zu einem Leistungsverlust führt, hängt davon ab, wie der Conpiler bzw. der Jitter den Code optimieren.

Gruß Gwinn

[Edit: typo]

08.04.2011 - 10:22 Uhr

Ich bin nicht ganz sicher, ob ich dein problem richtig verstanden habe:
Du möchtest die Funktion Get<T> aus dem Interface sowohl in einer Klasse Test1<T> mit demselben T aufrufen, als auch in anderen Klasse mit (beliebeigem) anderen T. Ist das so?
Dann benutz doch den Ansatz von Khalid und spendier der Klasse Test1 noch eine parameterlose Funktion Get:


    interface Test
    {
        T2 Get<T2>();
    }

    public class Test1<T> : Test
    {
        public T2 Get<T2>()
        {
            return default(T2);
        }

        public T Get()
        {
            return Get<T>();
        }
    }

Vielleicht hilft's ja.

Gruß Gwinn

25.03.2011 - 14:40 Uhr

Leite deine Struktur von IComparable<licenceinfo> ab und benutze die Sort-Funktion:



public struct licenseinfo:IComparable<licenseinfo>
{
      public string name;
      public string value;

      public int CompareTo(licenseinfo info)
      {
          return name.CompareTo(info.name);
      }
}


        static void Main(string[] args)
        {
            List<licenseinfo> licenseinfos=new List<licenseinfo>();  
            
            licenseinfos.Add(new licenseinfo() { name = "Peter", value = "III" });
            licenseinfos.Add(new licenseinfo() { name = "Anne", value = "I" });
            licenseinfos.Add(new licenseinfo() { name = "Linda", value = "II" });
            licenseinfos.Sort();
            foreach (licenseinfo info in licenseinfos)
            {
                Console.WriteLine(info.name + ": " + info.value);
            }
            Console.ReadKey();
        }

Gruß Gwinn

Edith meint noch:
Solltest du je nach Fall nach verschiedenen Eigenschaften sortieren wollen empfielt es sich stattdessen für jede Eigenschaft einen Comparison Delegaten zu schreiben.
Sieh dazu mal in List(Of T).Sort Method (Comparison(Of T)) nach.

11.03.2011 - 12:38 Uhr
  
MyControl= "tbx" + i;  
foreach (Control ctl in Controls)  
{  
   if (ctl.Name== MyControl)  
   {  
      ((TextBox)ctl).Text = sArray;  
   }  
}   
  

MyNickname

Eigentlich sollte das so funktionieren, vorausgesetzt MyControl ist ein String und die Textboxen heißen bei dir tatsächlich tbx1, tbx2, ...

Probier doch sonst einfach mal


str = "tbx"+i;
Control[] ctrs = Controls.Find(str, false);
foreach (Control textbox in ctrs)
{
    if (textbox is TextBox)
        textbox.Text = sArray;
}

11.03.2011 - 12:05 Uhr

Gibt es einen Grund dafür, dass du das KeyUp Event benutzt.
Mit KeyDown hast du das Problem nicht.

Gruß Gwinn