Я пытаюсь создать календарь с помощью C#, который содержит вкладку для каждого месяца в году с кнопками, отображающими дни, расположенные на вкладках (см. Прикрепленное изображение). Пользователь может ввести желаемый год в текстовое поле и нажать кнопку, чтобы отправить запрос (а не на прикрепленную картинку). В настоящее время у меня работает календарь, но я не могу понять, как перерисовать календарь, когда будут представлены разные годы.Перезагрузка формы в C#
Я попытался следовать этому примеру https://stackoverflow.com/a/33104430, но я не понимаю, когда следует называть Form_Load()
. Я также пробовал this.refresh()
в разных местах безрезультатно.
Любая помощь будет высоко оценена.
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();
}
Код в части '// кнопки настройки, представляющие дни на каждой странице вкладки', на самом деле мы должны увидеть, чтобы понять, что происходит не так. Как правило, вам не нужно делать ничего особенного, чтобы перерисовать страницу, если вы правильно добавляете элемент управления. – Enigmativity
Я должен добавить контроль неправильно. Я добавляю кнопку, а затем добавляю кнопку на вкладку формы. – IBWEV
Можете ли вы показать код, где вы устанавливаете 'mth' вне метода' call_on_load'? – Enigmativity