首页 > 解决方案 > 如何让我的文本框显示这个值?

问题描述

我的代码应该在文本框中给我一个月中的星期一数量,但它一直告诉我'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;
        }
    }
}

标签: c#

解决方案


看起来您希望用户在 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()函数中,您实际上是在跳过该月的第一天,因此它永远不会被考虑在内。


推荐阅读