Ich versuche, einen Kalender mit C# erstellen, die eine Registerkarte für jeden Monat des Jahres mit Schaltflächen für die Tage auf den Registerkarten enthält (siehe angehängtes Bild). Der Benutzer kann das gewünschte Jahr in ein Textfeld eingeben und auf eine Schaltfläche klicken, um seine Anfrage zu übermitteln (nicht auf dem angehängten Bild). Momentan funktioniert der Kalender, aber ich kann nicht herausfinden, wie der Kalender neu gezeichnet wird, wenn verschiedene Jahre eingereicht werden.Reloading Formular in C#
Ich habe versucht, diesem Beispiel https://stackoverflow.com/a/33104430 zu folgen, aber ich verstehe nicht, wenn Form_Load()
aufgerufen werden sollte. Ich habe auch versucht, this.refresh()
an verschiedenen Orten ohne Erfolg.
Jede Hilfe würde sehr geschätzt werden.
public Form1()
{
InitializeComponent();
call_on_load();
}
private void call_on_load()
{
pages = tabControl.TabPages;
year = Convert.ToInt16(textBoxYear.Text);
dt = new DateTime(year, 1, 1);
day = -1;
foreach (TabPage page in pages) //declare a page object and cycle through each tab page
{
if (!initialMonth)
{
mth++; //inc month if not first time. Originally set.
}
initialMonth = false;
if (mth > 12) //make a 1 year calendar
break;
//ftime = true;
Console.WriteLine("********************************The date is:" + dt.ToString());
x = ((((int)dt.DayOfWeek) * 75) + 10); //reset x coordinate
y = 20;
for (int rows = 1; rows <= 7; rows++) // # of rows in a month
{ //Some months have 6 rows. Use 7 to ensure the below break statement
if (!ftime)
{
if (dt.Day == 1) //at the top of another month
{
ftime = true;
break;
}
}
ftime = false;
y += 75; //move y coordinate
for (int col = 1; col <= 7; col++) //make 7 columns
{
Button b = new Button();
b.Name = dt.ToString("MMMM") + "_" + Convert.ToString(dt.Day) + "_" + dt.ToString("yyyy"); //store the date in the button name to parse
b.Click += (s, e) => //https://stackoverflow.com/questions/6187944/how-can-i-create-dynamic-button-click-event-on-dynamic-button
{
secondForm = new Form2();
String[] date = b.Name.Split('_');
secondForm.setDate(date[0], Convert.ToInt16(date[1]), Convert.ToInt16(date[2]));
secondForm.Show();
};
b.Size = new Size(50, 50);
b.Left = x;
b.Top = y;
page.Controls.Add(b); //add button to current tab page
// btnInt++;
b.Text = Convert.ToString(dt.Day);
getDate();
Console.WriteLine("The date is:" + dt.ToString());
dt = dt.AddDays(1);
if (dt.Day == 1)
break;
x += 75;
if (x > 460) //if x coordinate is at the end of the line
{
x = 10;
break;
}
}
}
}
}
private void btnSubmitF1_Click(object sender, EventArgs e)
{
year = Convert.ToInt16(textBoxYear.Text);
//this.Refresh(); //does not redraw
call_on_load(); //keeps original layout, does not redraw on button click
//Form_Load(btnSubmitF1,e); //probably not calling this method correctly. Is this method needed?
//this.Refresh(); //does not redraw
}
private void Form_Load(object sender, EventArgs e)
{
call_on_load();
}
Der Code im Teil '// setup buttons, der die Tage auf jeder Registerkarte repräsentiert, ist genau das, was wir sehen müssen, um herauszufinden, was falsch läuft. Im Allgemeinen müssen Sie nichts Spezielles tun, um die Seite neu zu zeichnen, wenn Sie das Steuerelement ordnungsgemäß hinzufügen. – Enigmativity
Ich muss die Steuerung nicht ordnungsgemäß hinzufügen. Ich füge eine Schaltfläche hinzu und füge dann die Schaltfläche der Registerkarte im Formular hinzu. – IBWEV
Können Sie bitte den Code zeigen, wo Sie 'mth' außerhalb der' call_on_load' Methode setzen? – Enigmativity