M.H. Shojaei Ответов: 2

Как отобразить, например, 7 дат в 7 текстовых полях с помощью цикла


Всем привет,
Как отобразить 7 дней в 7 текстовых полях с помощью цикла?
Я пытаюсь следовать коду, но не получается. - Что случилось?

Большое спасибо

Что я уже пробовал:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            DateTime a = DateTime.Now;
            DateTime b = a.AddDays(6);

            List<DateTime> dt = new List<DateTime>();

            for (DateTime i=a; i<= b; i.AddDays(1))
            {
                dt.Add(i);
            }
            dt.Add(Convert.ToDateTime(textBox1));
            dt.Add(Convert.ToDateTime(textBox2));
            dt.Add(Convert.ToDateTime(textBox3));
            dt.Add(Convert.ToDateTime(textBox4));
            dt.Add(Convert.ToDateTime(textBox5));
            dt.Add(Convert.ToDateTime(textBox6));
            dt.Add(Convert.ToDateTime(textBox7));

        }

2 Ответов

Рейтинг:
5

Maciej Los

Обратите внимание, что вам следует избегать использования кода, который хорошо известен в WinForms. Для получения более подробной информации, пожалуйста, смотрите: WPF против WinForms[^]. Графический интерфейс должен быть определен в XAML. Видеть: Обзор XAML (WPF) | Microsoft Docs[^].

Очень простой пример:
Файл MainWindow.язык XAML

<Window

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:local="clr-namespace:WpfApplication1" x:Class="WpfApplication1.MainWindow"

        Title="My dates..." Height="350" Width="525">
    <DataGrid ItemsSource="{Binding MyDates}" AutoGenerateColumns="False" Width="Auto">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Date, StringFormat={}{0:yyyy/MM/dd}}" Header="Date" Width="auto"/>
        </DataGrid.Columns>
    </DataGrid>    
    
</Window>


Файл MainWindow.язык XAML.в CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        //your binding source ;)
        public ObservableCollection<DateTime> MyDates { get; set; }

        public MainWindow()
        {            
            InitializeComponent();
            //add 7 dates
            MyDates = new ObservableCollection<DateTime>(Enumerable.Range(0, 7).Select(x => DateTime.Today.AddDays(x)));
            DataContext = this;

        }
    }
}


Для начала, пожалуйста, прочтите:
Введение в WPF[^]
Windows Presentation Foundation[^]
Общие Сведения О Связывании Данных[^]


Рейтинг:
16

OriginalGriff

Во-первых, не используйте функции преобразования для изменения пользовательского ввода: они выдают исключения, если пользователь совершает ошибку, и это очень раздражает. Учитывая количество ошибок, которые совершают пользователи, ваше приложение не будет популярным...
Вместо этого используйте методы TryParse (или TryParseExact) - они возвращают bool с надписью "OK / Not OK", чтобы вы могли выдать пользователю конкретное сообщение об ошибке вместо сбоя вашего приложения.

Во - вторых, этот код берет информацию из текстового поля и добавляет ее в вашу коллекцию-он даже не пытается поместить что-либо в текстовое поле!

Вы хотите что-то вроде этого:

DateTime a = DateTime.Now;
foreach (Control c in Controls)
    {
    TextBox tb = c as TextBox;
    if (tb != null)
        {
        tb.Text = a.ToString();
        a = a.AddDays(1);
        }
    }


M.H. Shojaei

Привет Мистер OriginalGriff,

Я использую пространство имен:
использование системы.Окна.Управления;
Моя целевая платформа-4.6, но есть ошибка:
CS0103 C# имя "элементы управления" не существует в текущем контексте.

Большое спасибо

MiteshUmta

Привет, сначала создайте один Groupbox и сохраните все текстовые поля в этой группе, А свойство name groupbox - "pnlTextBoxList" .
таким образом, вы можете перебирать все текстовые поля в разделе Groupbox.

А датавремя = Датавремя.Сейчас;
foreach (управление c в pnlTextBoxList.Управления)
{
TextBox tb = c как текстовое поле;
if (tb != null)
{
терабайт.Текст = а.Метод toString();
a = a.AddDays(1);
}
}

M.H. Shojaei

Привет ГЦСИ,

А датавремя = Датавремя.Сейчас;

foreach (управление c в uniFormGrid.Дети)
{
TextBox textbox = c как текстовое поле;
если (текстовое поле != нуль)
{
текстовый.Текст = а.Метод toString();
a = a.AddDays(1);
}
}
Большое спасибо