Кнопка может быть включена только в том случае, если текстовое поле И указатель даты и времени заполнены - PullRequest
0 голосов
/ 08 ноября 2018

[Отредактированная версия на основе ответов]

Я бы хотел, чтобы button1 была включена, только если заполнены и текстовое поле, и указатель даты и времени. Я могу сделать для текста, но не для datetimepicker. Вот мой полный код. К вашему сведению: мой указатель даты и времени форматируется так, чтобы изначально он был пустым, чтобы пользователь мог сам выбирать дату.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Inspection
  {
    public partial class Vdetails : Form
     {
    public Vdetails()

    {
        InitializeComponent();
        Vnew.Enabled = false; 
    }

    //Allow user input date
    private void DTafes_ValueChanged(object sender, EventArgs e)
    {
        DTafes.CustomFormat = @"";
    }
    private void DTfa_ValueChanged_1(object sender, EventArgs e)
    {
        DTfa.CustomFormat = @"";
    }
    private void DTfe_ValueChanged(object sender, EventArgs e)
    {
        DTfe.CustomFormat = @"";
    }

    //Condition to allow button to go next
    private void ActivateButton()
    {
        Button1.Enabled = (Vehicle.Text != "" && Distance.Text != "");
    }

    private void Vehicle_TextChanged(object sender, EventArgs e)
    {
        ActivateButton();
    }

    private void Distance_TextChanged(object sender, EventArgs e)
    {
        ActivateButton();
    }
}

Что и как добавить код, чтобы можно было заполнить указатель даты и времени. Надеюсь, что кто-нибудь сможет мне помочь.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

DateTimePicker не имеет события textaged. Внутри dateTimePicker никогда не будет пустой строки. (Возможно, вы можете установить его с помощью кода, но не с помощью пользовательского ввода). Вы можете использовать событие valueChanged объекта dateTimePicker, чтобы что-то сделать, когда пользователь изменил дату.

Поскольку текст никогда не будет пустым, вам не нужно проверять его в вашей ActiveButton-функции.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void ActiveateButton()
    {
        this.button1.Enabled = textBox1.Text != string.Empty;
    }


    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ActiveateButton();
    }
    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        ActiveateButton();
    }
}
0 голосов
/ 08 ноября 2018

DateTimePicker всегда получает значение, но вы можете прослушать событие ValueChanged

private bool dateChanged;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    dateChanged = false;
    button1.Enabled = false;
}

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    dateChanged = true;
    SetEnabledness();
}

private void SetEnabledness()
{
    button1.Enabled = !string.IsNullOrWhiteSpace(textBox1.Text) && dateChanged;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    SetEnabledness();
}

Если у вас есть несколько DateTimePicker, вы можете использовать HashSet вместо bool (просто убедитесь, что вы подключили все ValueChangedEvents к dp_ValueChanged, например,

    private HashSet<DateTimePicker> dateChanged = new HashSet<DateTimePicker>();
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        dateChanged.Clear();
        button1.Enabled = false;

        dateTimePicker1.Format = DateTimePickerFormat.Custom;
        dateTimePicker2.Format = DateTimePickerFormat.Custom;
        dateTimePicker3.Format = DateTimePickerFormat.Custom;
        dateTimePicker1.CustomFormat = @" ";
        dateTimePicker2.CustomFormat = @" ";
        dateTimePicker3.CustomFormat = @" ";
    }

    private void dp_ValueChanged(object sender, EventArgs e)
    {
        var dp = (DateTimePicker) sender;
        dp.Format = DateTimePickerFormat.Short;
        dateChanged.Add(dp);
        SetEnabledness();
    }

    private void SetEnabledness()
    {
        button1.Enabled = !string.IsNullOrWhiteSpace(textBox1.Text) && dateChanged.Count == 3;
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        SetEnabledness();
    }
...