Как проверить и отключить элементы управления flowLayoutPanel в форме окна С#?

Я просто хочу убедиться, что ввод времени пакетной передачи больше 0, и я хочу отключить контроль времени ожидания, поскольку он предназначен только для вывода.

Я полный новичок, пожалуйста, посоветуйте, как мне реализовать это в коде ниже? большое спасибо!

Вот код из формы выше:

namespace CPU_Scheduling
{
public partial class FCFS : Form
{
   
    public FCFS()
    {
        InitializeComponent();
        
        picBusy.Hide();
        picWaiting.Show();
       
    }
   
   
    public bool ran = false;
    public int Numpro;

    public int Max;

    public int Min;
   
    private void label3_Click(object sender, EventArgs e)
    {

    }

    private void label12_Click(object sender, EventArgs e)
    {

    }
    Random rand = new Random();
    private int Normal(double mean, double stdDev, int max, int min)
    {
        int k = max + 1;
        while (k > max || k < min)
        {
            double u1 = 1.0 - rand.NextDouble(); //uniform(0,1] random doubles
            double u2 = 1.0 - rand.NextDouble();
            double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) *
                         Math.Sin(2.0 * Math.PI * u2); //random normal(0,1)


            double randNormal = mean + stdDev * randStdNormal; //random normal(mean,stdDev^2)
            k = (int)Math.Floor(randNormal);

        }

        return k;

    }
    Process[] prolist;
    Process[] dosched;
    public void populate()
    {   prolist = new Process[Numpro];           
        double mean = (double)(Max + Min)/(double) 2;
        double stdDev = (double)(Max - Min) / (double)6;
        
        for (int i = 0; i < Numpro; i++)

        {   
            prolist[i] = new Process();
            prolist[i].Num = i;
            if (ran == true)
            {
                prolist[i].Arrival = Normal(mean, stdDev, Max, Min);
                prolist[i].Burst = Normal(mean, stdDev, Max, Min+1);
            }
            else
            {
                prolist[i].Arrival = 0;
                prolist[i].Burst = 1;
            }
            flowLayoutPanel1.Controls.Add(prolist[i]);
        }
        
    }
    int totalwait=0;
    int totalturnAround=0;
    public void Sched()
    {
        dosched = new Process[Numpro];
        dosched = prolist;
        dosched.Count();
        for (int k = 0; k < Numpro; k++)
        {
            for (int i = k + 1; i < Numpro; i++)
            {
                if (dosched[k].Arrival > dosched[i].Arrival ||((dosched[i].Arrival==dosched[k].Arrival) && (dosched[k].Num>dosched[i].Num )))
                {
                    Process temp = new Process();
                    temp = dosched[i];
                    dosched[i] = dosched[k];
                    dosched[k] = temp;
                }
            }
        }

        int clock = 0;
        totalwait = 0; totalturnAround = 0;
        for (int i = 0; i < Numpro; i++)
        {
            if (dosched[i].Arrival >= clock)
            {
                dosched[i].Start = dosched[i].Arrival;
                clock += dosched[i].Start;
                clock += dosched[i].Burst;

            }
            else
            {
                if (i > 0)
                    dosched[i].Start = dosched[i - 1].End;
                
                clock += dosched[i].Burst;
            }
            if (dosched[i].Start > dosched[i].Arrival)
                dosched[i].WaitT = dosched[i].Start - dosched[i].Arrival;
            else dosched[i].WaitT = 0;
            dosched[i].End = dosched[i].Start + dosched[i].Burst;
            dosched[i].Turnaround = dosched[i].WaitT + dosched[i].Burst;
            totalwait += dosched[i].WaitT;
            totalturnAround += dosched[i].Turnaround;
        }
        
        for(int i=0;i<Numpro;i++)
        {   for(int k=0;k<Numpro;k++)
                if (dosched[i].Num == prolist[k].Num)
                {
                    prolist[k].WaitT = dosched[i].WaitT;
                }
        }
        
    }
    
    private void LoadBar(Process p1)
    {   
        Process k = new Process();
        k = p1;
        Label k1 = new Label();
        k1.AutoSize = true;
        Label k2 = new Label();
        k2.AutoSize = true;
        k1.Text = "P" + p1.Num.ToString();
        k2.Text = p1.Start.ToString();
        LoadBar newload = new LoadBar();
        newload.Max = k.Burst;
        int i = tableLayoutPanel1.ColumnCount++;
        newload.load();
       
        tableLayoutPanel1.Controls.Add(k1, i - 1, 0);
        tableLayoutPanel1.Controls.Add(newload.b1, i - 1, 1);
        tableLayoutPanel1.Controls.Add(k2, i - 1, 2);
        
        picBusy.Show();
        picWaiting.Hide();
        k.loadprogress();
        
    }
   
    int orderpro=0;
    int counttime=0;
    int endtime = 0;
    bool stop;
    private void btnStart_Click(object sender, EventArgs e)
    {
        flowLayoutPanel1.Enabled = false;
        timer1.Tick -= timer1_Tick;
        Simulate();
    }
    private void Simulate()
    {
        Sched();
        
        counttime = 0;
        for (int i = 0; i < Numpro; i++)
        {
            if (endtime < prolist[i].End) endtime = prolist[i].End;
        }
        timer1.Tick += timer1_Tick;
        timer1.Interval = 1000;
       
        timer1.Start();
    }
    

    
    int wait = 0;
    private void timer1_Tick(object sender, EventArgs e)
    {

        
        string waitpro = "";

            lbClock.Text = (counttime).ToString();
            for (int i = 0; i < Numpro; i++)
            {
                if (counttime == prolist[i].Start)
                {
                    wait = prolist[i].End;
                    prolist[i].setWait(prolist[i].WaitT);
                    LoadBar(prolist[i]);
                    lbCurrent.Text = "P" + prolist[i].Num.ToString();

                }
            }
            int numqueue = 0;
            for (int k = 0; k < Numpro; k++)
                if ((counttime > dosched[k].Arrival) && (counttime < dosched[k].Start))
                { waitpro += "P" + dosched[k].Num.ToString() + "|"; numqueue++; }
            lbWait.Text = waitpro; lbQueue.Text = numqueue.ToString();
            if (counttime < wait ) { lbStatus.Text = "Busy"; picBusy.Show(); picWaiting.Hide(); }
            else if (counttime<endtime) { lbStatus.Text = "Idle"; picBusy.Hide(); picWaiting.Show(); }


            if (counttime == endtime+1) { timer1.Stop(); lbStatus.Text = "Idle"; picBusy.Hide(); picWaiting.Show();lbCurrent.Text = "non";
                lbWaitT.Text = Math.Round((double)totalwait / (double)Numpro, 2).ToString();
                lbTurn.Text = Math.Round((double)totalturnAround / (double)Numpro, 2).ToString();
            }
            counttime++;
        
       
    }
    
    private void btnRestart_Click(object sender, EventArgs e)
    {
        flowLayoutPanel1.Enabled = true;
        timer1.Tick -= timer1_Tick;
        picBusy.Hide();picWaiting.Show();
        lbClock.Text = "0";
        lbQueue.Text = "0";
        lbStatus.Text = "Idle";
        lbCurrent.Text = "P";
        lbTurn.Text = "0";
        lbWaitT.Text = "0";

        flowLayoutPanel1.Controls.Clear();
        for (int i = tableLayoutPanel1.Controls.Count - 1; i >= 0; --i)
            tableLayoutPanel1.Controls[i].Dispose();

        tableLayoutPanel1.Controls.Clear();
        tableLayoutPanel1.ColumnStyles.Clear();
        tableLayoutPanel1.ColumnCount = 1;

      
        for (int i = 0; i < Numpro; i++)

        {
            prolist[i].stop();
            
            flowLayoutPanel1.Controls.Add(prolist[i]);
        }
        
        //flowLayoutPanel1.Controls.Clear();



    }

    private void FCFS_Load(object sender, EventArgs e)
    {
        this.FormClosed += new FormClosedEventHandler(formclose);

    }
    private void formclose(object sender, EventArgs e)
    {
        EntryForm k = new EntryForm();
        k.Show();
    }
}
}

Полная программа C# с GitHub: ссылка

«Я просто хочу убедиться, что ввод времени пакетной передачи больше 0, и я хочу отключить контроль времени ожидания, поскольку он предназначен только для вывода». КОГДА вы хотите, чтобы это произошло? Каким методом? В ответ на событие? Может быть, в событии Tick() вашего таймера?

Idle_Mind 26.12.2020 15:07

при нажатии кнопки «Пуск» я хочу, чтобы он проверял, больше ли входное время пакета больше 0, и если нет, останавливает выполнение метода. Я знаю, как это проверить в datagridview, но создатель использовал панель flowlayoutpanel.

Lance2k 28.12.2020 08:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
143
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

при нажатии кнопки запуска я хочу, чтобы он проверял, вводится ли время взрыва больше 0, а если нет, остановите выполнение метода. я знаю как проверьте это на datagridview, но создатель использовал flowlayoutpanel.

Что ж, у вас уже есть массив Process[] prolist;, который содержит все экземпляры Process, просто повторите его. Тот факт, что они отображаются в FlowLayoutPanel, не имеет значения.

Например:

private void btnStart_Click(object sender, EventArgs e)
{
    for(int i=0; i<prolist.Length; i++)
    {
        if (prolist[i] != null && prolist[i].Burst <= 0)
        {
            MessageBox.Show("All burst times must be greater than zero");
            return; // exit the method
        }
    }     

    flowLayoutPanel1.Enabled = false;
    timer1.Tick -= timer1_Tick;
    Simulate();
}

Другие вопросы по теме