Я новичок в C # и проработал какой-то код, в котором я могу ввести день недели для данного месяца, а затем даты (29.03.2009), которые соответствуют дню (например, пятница ) распечатаны. Я успешно получил эту работу с помощью консольного приложения.
Мне бы хотелось иметь такую же функциональность при использовании форм. Я посмотрел несколько видео и провел исследование по внедрению форм, и хотя это кажется довольно простым, я хотел бы, чтобы большая часть кода работала вне кнопок в своем собственном классе, чтобы мне не приходилось вводить один и тот же код каждый раз для каждой кнопки (пример показан ниже).
Вот мой код в формах:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DesktopApp5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class A
{
public static void Main()
{
DateTime timenow = DateTime.Now;
//Creates 2 strings with year and month
string currentyearstr = DateTime.Now.Year.ToString();
string currentmonthstr = DateTime.Now.Month.ToString();
//Turns two strings into integers for further use
int currentyear = int.Parse(currentyearstr);
int selectmonth = int.Parse(currentmonthstr);
//Outputs total days for the current month, Number of times to loop command
var totaldaysinmonth = DateTime.DaysInMonth(currentyear, selectmonth);
List<string> meetingdates = new List<string>();
for (int i = 0; i < totaldaysinmonth; i++)
{
DateTime dateofmonth = new DateTime(timenow.Year, timenow.Month, 1 + i);
Calendar mycal = CultureInfo.InvariantCulture.Calendar;
string dayofweek = mycal.GetDayOfWeek(dateofmonth).ToString();
if (dayofweek == "Friday")
{
meetingdates.Add(dateofmonth.Date.ToString("MM/dd"));
}
}
}
}
public void Form1_Load(object sender, EventArgs e)
{
}
public void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = A.currentyearstr;
}
}
}
Ожидаемый результат: я создал класс A для хранения переменных, которые я буду использовать для разных мест, таких как текстовые поля, в одном месте. Я ожидаю, что смогу найти переменную currentyearstr
, например.
Я понимаю, что если я только создаю класс и не имею кода внутри Main()
, то он становится доступным после объявления строки, int и других static
. Проблема с этим заключается в том, что тогда if
и for
не работают, если они не находятся внутри Main()
. В любом случае это то, что я думаю. То, что я только что описал, можно увидеть здесь:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DesktopApp7
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static class A
{
static DateTime timenow = DateTime.Now;
//Creates 2 strings with year and month
public static string currentyearstr = DateTime.Now.Year.ToString();
static string currentmonthstr = DateTime.Now.Month.ToString();
//Turns two strings into integers for further use
static int currentyear = int.Parse(currentyearstr);
static int selectmonth = int.Parse(currentmonthstr);
//Outputs total days for the current month, Number of times to loop command
static var totaldaysinmonth = DateTime.DaysInMonth(currentyear, selectmonth);
//Gives all dates in the month
static List<string> meetingdates = new List<string>();
static for (int i = 0; i<totaldaysinmonth; i++)
{
static DateTime dateofmonth = new DateTime(timenow.Year, timenow.Month, 1 + i);
Calendar mycal = CultureInfo.InvariantCulture.Calendar;
static string dayofweek = mycal.GetDayOfWeek(dateofmonth).ToString();
static if (dayofweek == "Friday")
{
meetingdates.Add(dateofmonth.Date.ToString("MM/dd"));
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = A.currentyearstr;
}
}
}
У меня есть одно сомнение: зачем мне в этом случае указывать, что все статично? когда в первом примере, когда большая часть кода находится в Main
, мне нужно было сделать это только один раз. Я понимаю, что public - это то, что позволяет мне использовать переменную вне класса.
Появляются следующие ошибки:
Invalid token 'for' in class, struct, or interface member
Invalid token 'if' in class, struct, or interface member
В чем причина этих ошибок? В качестве вопроса более высокого уровня, как мне организовать код, который будет многократно использоваться, чтобы он был доступен для всех других классов? Например, в моем проекте мне нужно вызывать в этих строках разные целые числа, строки и дату и время при использовании разных форм окон.
Заранее спасибо за любую помощь. Это высоко ценится. :)
Edit:
В комментариях ниже приведен мой новый код теперь, когда я использовал метод DatesCalculated
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DesktopApp7
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class A
{
public void DatesCalculated(string[] args)
{
DateTime timenow = DateTime.Now;
//Creates 2 strings with year and month
string currentyearstr = DateTime.Now.Year.ToString();
string currentmonthstr = DateTime.Now.Month.ToString();
//Turns two strings into integers for further use
int currentyear = int.Parse(currentyearstr);
int selectmonth = int.Parse(currentmonthstr);
//Outputs total days for the current month, Number of times to loop command
var totaldaysinmonth = DateTime.DaysInMonth(currentyear, selectmonth);
//Gives all dates in the month
List<string> meetingdates = new List<string>();
for (int i = 0; i < totaldaysinmonth; i++)
{
DateTime dateofmonth = new DateTime(timenow.Year, timenow.Month, 1 + i);
Calendar mycal = CultureInfo.InvariantCulture.Calendar;
string dayofweek = mycal.GetDayOfWeek(dateofmonth).ToString();
if (dayofweek == "Friday")
{
meetingdates.Add(dateofmonth.Date.ToString("MM/dd"));
}
}
return;
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}