如何使文本框显示此值?

  • 本文关键字:显示 何使 文本 c#
  • 更新时间 :
  • 英文 :


我的代码应该在文本框中给我一个月中的星期一数量,但它一直告诉我'Form1.MondaysInMonth(DateTime('是一种方法,在给定的上下文中无效,有人知道如何解决这个问题吗?我对编码很陌生,所以如果我做错了什么,请告诉我。

namespace WindowsFormsApp7
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void TextBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = MondaysInMonth.ToString();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
string month = textBox2.Text;
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
string year = textBox3.Text;
}
private void Label1_Click(object sender, EventArgs e)
{

}
private void Label2_Click(object sender, EventArgs e)
{
}
public static int MondaysInMonth(DateTime thisMonth)
{
int mondays = 0;
int month = thisMonth.Month;
int year = thisMonth.Year;
int daysThisMonth = DateTime.DaysInMonth(year, month);
DateTime beginingOfThisMonth = new DateTime(year, month, 1);
for (int i = 0; i < daysThisMonth; i++)
if (beginingOfThisMonth.AddDays(i).DayOfWeek == DayOfWeek.Monday)
mondays++;
return mondays;
}
}
}

看起来您希望用户在 textBox2 中输入月份,在 textBox3 中输入年份,并在 textBox1 中输入该月/年组合的天数。 结果是计算出来的,所以实际上你应该使用标签而不是文本框,但我想你可以只将textBox1设置为只读。

我假设月份和年份以数字形式输入。 您需要做的第一件事是将数字的字符串表示形式转换为有效的整数。 一种常见的方法是使用 int。TryParse((. 将两个用户条目转换为有效数字后,可以调用函数并将结果放入输出控件中。

由于您需要有效的月份和有效的年份,因此我将验证代码放入一个通用方法中,并从textBox2和textBox3 TextChanged((事件中调用它。 你根本不应该有一个 textBox1 TextChanged(( 事件。

这可能看起来像这样:

private void textBox2_TextChanged_1(object sender, EventArgs e)
{
validateMonthYear();
}
private void textBox3_TextChanged_1(object sender, EventArgs e)
{
validateMonthYear();
}
private void validateMonthYear()
{
int month, year;
if (int.TryParse(textBox2.Text, out month) && int.TryParse(textBox3.Text, out year))
{
int days = DaysInMonth(month, year, DayOfWeek.Monday);
if (days > 0)
{
textBox1.Text = days.ToString();
return;
}                                                 
}
textBox1.Text = "{Invalid}";
}
public int DaysInMonth(int month, int year, DayOfWeek day)
{
int days = 0;
try
{
DateTime dt = new DateTime(year, month, 1);
int daysThisMonth = DateTime.DaysInMonth(year, month);
for (int i = 1; i <= daysThisMonth; i++, dt = dt.AddDays(1))
if (dt.DayOfWeek == day)
days++;
}
catch (Exception) { }
return days;
}

请注意,在原始DaysInMonth()函数中,您实际上是在跳过该月的第一天,因此永远不会考虑它。

最新更新