Laden...

Eigenes Usercontrol schreiben (Datagridview)

Erstellt von myBig? vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.144 Views
M
myBig? Themenstarter:in
241 Beiträge seit 2005
vor 16 Jahren
Eigenes Usercontrol schreiben (Datagridview)

Hallo zusammen,

hat vielleicht jemand eine gute Seite, wo ich nachlesen kann, wie ich am besten ein eigenes Usercontrol schreiben kann?

Bin gerade dabei eins zu schreiben. Es soll eins so ähnlich wie Kalender sein.
Komme aber da nicht so richtig weiter und habe bisher nichts gefunden wie ich da am besten ran gehen kann.

Hier ist so mein ansatz:


namespace Visuelle_Projektplanung
{
    public class Kalender : DataGridView 
    {        
        private int k_jahr, k_viertel;
        private string k_blockFarbe,k_toggleFarbe, k_cellWidth, k_cellHight, k_blankGifPath;
        string[] k_namen;
        int k_KeineTage;

        public Kalender()
        {
            k_namen = new string[3];
        }

        #region Public Proberties

        //gets sets aus der Tabelle???

        [Bindable(true), Category(), DefaultValue(1)]
        public int Viertel
        {
            get
            {
                return k_viertel;
            }

            set
            {
                k_viertel = value;
            }
        }

        [Bindable(true), Category(), DefaultValue("")]
        public int Jahr
        {
            get
            {
                return k_jahr;
            }

            set
            {
                k_jahr = value;
            }
        }

        [Bindable(true), Category(), DefaultValue("Rot")]
        public string BlockFarbe
        {
            get
            {
                return k_blockFarbe;
            }

            set
            {
                k_blockFarbe = value;
            }
        }

        [Bindable(true), Category(), DefaultValue("15")]
        public int CellWidth
        {
            get
            {
                return int.Parse(k_cellWidth);
            }

            set
            {
                k_cellWidth = value.ToString();
            }
        }

        [Bindable(true), Category(), DefaultValue("15")]
        public int CellHeight
        {
            get
            {
                return int.Parse(k_cellHight);
            }

            set
            {
                k_cellHight = value.ToString();
            }
        }

        [Bindable(true), Category(), DefaultValue("#dcdcdc")]
        public string ToggleFarbe
        {
            get
            {
                return k_toggleFarbe;
            }

            set
            {
                k_toggleFarbe = value;
            }
        }

        [Bindable(true), Category(), DefaultValue("#dcdcdc")]
        public string BlankGifPath
        {
            get
            {
                return k_blankGifPath;
            }

            set
            {
                k_blankGifPath = value;
            }
        }

        #endregion

        #region Hilfs Funktionen

        private void RechteSeite()
        {
            int monat;
            string wochentag;
            bool woche = false;
            ViertelHelfer viertel = new ViertelHelfer(2006, 2);
            DataGridView dgv = new DataGridView();

            for (int i = 1; i < 3; i++)
            {
                monat = i + (3 * (viertel.ViertelIndex - 1));
                //Kalender.Columns.Add(viertel.AlleTageImMonat(monat).ToString(),typeof(string));
                //gridView.Columns.Add(viertel.AlleTageImMonat(monat).ToString());
                foreach(char zahl in viertel.AlleTageImMonat(monat).ToString())
                {
                    dgv.Columns.Add("TagesZahl", zahl.ToString());
                }
                //col. (viertel.AlleTageImMonat(monat).ToString());
            }
            

            for (int i = (3 * viertel.ViertelIndex - 2); i <= (3 * viertel.ViertelIndex); i++)
            {
                for (int j = 1; j <= viertel.AlleTageImMonat(i); j++)
                {
                    wochentag = viertel.getTageName(i, j);

                    if (wochentag == "Mo")
                    {
                        woche = !woche;
                    }
                }
            }
        }

        #endregion

        #region ViertelHelfer
        private class ViertelHelfer
        {
            private int k_jahr;
            private int k_viertel;
            private string[] k_namen = new string[3];
            private int k_KeineTage;

            public ViertelHelfer()
            {
            }

            public ViertelHelfer(int jahr, int viertel)
            {
                k_jahr = jahr;
                k_viertel = viertel;
                k_namen = getViertelName();
                k_KeineTage = getTageImViertel(k_jahr, k_viertel);
            }

            public int Jahr
            {
                get
                {
                    return k_jahr;
                }
            }

            public int ViertelIndex
            {
                get
                {
                    return k_viertel;
                }
            }

            public string[] Namen
            {
                get
                {
                    return k_namen;
                }
            }

            public int Tage
            {
                get
                {
                    return k_KeineTage;
                }
            }

            public string GetMonatsName(int i)
            {
                return k_namen[i - 1];
            }

            public int AlleTage()
            {
                int ReturnValue = 0;

                switch (k_viertel)
                {
                    case 1:
                        ReturnValue = DateTime.DaysInMonth(k_jahr, 1);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 2);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 3);
                        break;
                    case 2:
                        ReturnValue = DateTime.DaysInMonth(k_jahr, 4);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 5);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 6);
                        break;
                    case 3:
                        ReturnValue = DateTime.DaysInMonth(k_jahr, 7);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 8);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 9);
                        break;
                    case 4:
                        ReturnValue = DateTime.DaysInMonth(k_jahr, 10);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 11);
                        ReturnValue += DateTime.DaysInMonth(k_jahr, 12);
                        break;
                }

                return ReturnValue;
            }

            public int AlleTageImMonat(int i)
            {
                return DateTime.DaysInMonth(k_jahr,i);
            }

            public string getTageName(int monat, int tag)
            {
                string ReturnValue = string.Empty;
                DateTime t = new DateTime(k_jahr, monat, tag);
                switch (t.DayOfWeek)
                {
                    case
                    DayOfWeek.Monday: ReturnValue = "Mo";
                        break;
                    case
                    DayOfWeek.Tuesday: ReturnValue = "Di";
                        break;
                    case
                    DayOfWeek.Wednesday: ReturnValue = "Mi";
                        break;
                    case
                    DayOfWeek.Thursday: ReturnValue = "Do";
                        break;
                    case
                    DayOfWeek.Friday: ReturnValue = "Fr";
                        break;
                    case
                    DayOfWeek.Saturday: ReturnValue = "Sa";
                        break;
                    case
                    DayOfWeek.Sunday: ReturnValue = "So";
                        break;
                }
                return ReturnValue;
            }

            private string[] getViertelName()
            {
                string[] ReturnValue = new string[3];

                switch (k_viertel)
                {
                    case 1:
                        ReturnValue[0] = "Januar";
                        ReturnValue[1] = "Februar";
                        ReturnValue[2] = "März";
                        break;
                    case 2:
                        ReturnValue[0] = "April";
                        ReturnValue[1] = "Mai";
                        ReturnValue[2] = "Juni";
                        break;
                    case 3:
                        ReturnValue[0] = "Juli";
                        ReturnValue[1] = "August";
                        ReturnValue[2] = "September";
                        break;
                    case 4:
                        ReturnValue[0] = "Oktober";
                        ReturnValue[1] = "November";
                        ReturnValue[2] = "Dezember";
                        break;
                }
                return ReturnValue;
            }

            private int getTageImViertel(int jahr, int viertel)
            {
                DateTime dtStart, dtEnde;
                if (viertel < 4)
                {
                    dtStart = new DateTime(jahr, (3 * viertel - 2), 1);
                    dtEnde = new DateTime(jahr, (3 * viertel - 2) + 3, 1);
                }
                else
                {
                    dtStart = new DateTime(jahr, (3 * viertel - 2), 1);
                    dtEnde = new DateTime(jahr + 1, 1, 1);
                }

                TimeSpan ts = new TimeSpan(dtEnde.Subtract(dtStart).Ticks);
                return ts.Days;
            }

            public int getSpaltenIndex(string tag)
            {
                DateTime dt = DateTime.Parse(tag);
                int offset = 0;
                int ReturnValue = 0;

                for (int i = 1; i < k_viertel; i++)
                {
                    offset += getTageImViertel(k_jahr, i);
                }

                ReturnValue = (dt.DayOfYear - 1) - offset;

                if (ReturnValue < 0)
                {
                    ReturnValue = 0;
                }

                if (ReturnValue > getTageImViertel(k_jahr, k_viertel))
                {
                    ReturnValue = getTageImViertel(k_jahr, k_viertel);
                }

                return ReturnValue;
            }
        }
        #endregion
    }

Wie gesagt komme da nicht so richtig weiter. Habe auch irgendwo was gelesen, dass ich diese Klasse dann als .dll einbinden muss. Sehe ich das richtig?

Wäre echt klasse wenn mir einer eine gute Seite sagen kann, wo es erklärt ist, wie meine eigene UserControll anfertigt und einbindet.

Danke im voraus.

Gruß

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo myBig?,

ein UserControl schreibt man genau wie ein Form. Wenn du Forms schreiben kannst, kannst du auch UserControls schreiben. Deshalb wirst du vermutlich auch nicht viele Beschreibungen für UserControls finden.

Oder willst du das UserControl selber zeichnen? Dann [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox) und [Tutorial] Gezeichnete Objekte mit der Maus verschieben.

Wie gesagt komme da nicht so richtig weiter.

Wo kommst du nicht weiter?

herbivore

M
myBig? Themenstarter:in
241 Beiträge seit 2005
vor 16 Jahren

Hallo Herbivore,

ich würde gerne mal ein paar ergebnisse sehen wenn ich mein Code Kompiliere, aber das kann man wohl nicht so richtig. Daher denke ich das ich irgendwie auf den falschen Weg bin. Daher auch meine Frage mit der .dll einbinden 🤔

habe da noch nicht richtig drüber nachgedacht:-(, aber ich denke mal, dass ich es selber zeichnen muss.

Nun ja, ich möchte gerne UserControl schreiben von einem DataGidView. Das soll dann ein mehr oder weniger Kalender darstellen. In den Coumns sollen die Monate und die Tage stehen evtl. auch noch das Datum(z.B. 18.07). Da drunter soll dann ein Balken über einen bestimmten Zeitraum dargestellt werden. Dies nur mal kurz und grob wie es aussehen soll.

Dieses Control soll mir eine Übersicht zur Verfügung stellen. Das war so mein Ansatz. Und ich hatte mir gedacht, dass ich mir so eins selber schreibe 🙂! Weiß nur nicht so richtig wie man da so ran geht:-(! Bin ich denn so einigermassen auf den richtigen weg mit meinem Code.

Werde mir auf jeden Fall deine Links nochmal genauer anschauen🙂!

MfG

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo myBig?,

ein UserControl kann man wie jede andere Klasse auch benutzen. Wenn sie in einer DLL liegt muss man noch eine Referenz auf die DLL hinzufügen. Das ist alles.

herbivore

W
558 Beiträge seit 2006
vor 16 Jahren