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()
函数中,您实际上是在跳过该月的第一天,因此它永远不会被考虑在内。
推荐阅读
- html - 下载的 html 页面无法识别 utf-8 字符
- vue.js - Vue-router页面刷新或URL访问
- three.js - three.js:在自定义几何体上计算 faceVertexUvs 以进行纹理映射
- java - Java 代理 Burp
- c++ - 为什么捕获 lambda 不捕获变量?
- javascript - 从 websocket 轮询 json 实时数据并填充到 HTML 表中,数据流
- django - 服务器 (AWS) 上的当前时间与实时不同
- html - 以表格或类似形式从链接收集 XML 或 CSV 数据到网站
- android - 我可以将我的 Android 模拟器 (AVD) 连接到真正的接入点吗?
- javascript - Javascript 数组仅显示搜索到的项目