Member 13378284 Ответов: 1

Как сделать огонь в окне сообщения, если условие else и значение TimeSpan?


У меня есть этот код
<pre>private void timer2_Tick(object sender, EventArgs e)
        {
//start time is another DateTime.now
//timeSinceStart is an array of timeSpan
//i believe that the for loop is for me to be able to create and store many values for //the timespan and update the listview items(see link below for the photo of the form)
            for (int w = 0; w < listView1.Items.Count; w++)
            {
                timeSinceStart[w] = DateTime.Now - startTime[w];
                listView1.Items[w].SubItems[6].Text = (timeSinceStart[w].TotalSeconds.ToString());
                if (f.ToString() == listView1.Items[w].SubItems[6].Text)
                {
//you can ignore the mysql codes here
//f.ToString() is default 60(its an integer)
                    string constring = "server=localhost;database=dbhorizon;uid=root;password=1234";
                    string Query = "update tblUserIdd set User_Available = 'Available' where User_ID='" + listView1.Items[w].SubItems[0].Text + "' ";

                    MySqlConnection conDatabase = new MySqlConnection(constring);
                    MySqlCommand cmdDatabase = new MySqlCommand(Query, conDatabase);
                    MySqlDataReader myReader;

                    conDatabase.Open();
                    myReader = cmdDatabase.ExecuteReader();
                    dgvref();
//this is what matters 
                    MessageBox.Show("dedede");
                }
                else
                {
                    label3.Text = timeSinceStart[w].TotalSeconds.ToString();
                }
            }

Я действительно не могу заставить окно сообщения всплывать, а также, Значение timespan имеет десятичные значения, есть ли у него связь, почему условие if не срабатывает?
во всяком случае, над этой формой я работаю.

edit * столбец MH на рисунке отсчитывается вверх, например 1 2 3 4 5 6 и т. д.

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

Я попытался преобразовать timespan в datetime и использовать datetime и timespan в условии if else, но это также, похоже, не работает.

Richard MacCutchan

Вам просто нужно выяснить, почему оператор if никогда не срабатывает; отладчик поможет. И почему вы преобразуете числа в строки, чтобы сравнить их?

Member 13378284

Я думаю, что это сработало, когда я заменил этот код if (f.ToString() == listView1.Предметы[w].Подпункты[6]. текст) с этим if (timeSinceStart[w].TotalSeconds >= f& & amp; timeSinceStart[w].TotalSeconds <= f + 1)

1 Ответов

Рейтинг:
8

OriginalGriff

Во-первых, не делайте этого так: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Тогда спросите себя о двух вещах:
1) Действительно ли это хорошая идея-попытаться открыть MessageBox в обработчике тиков таймера? Как быстро работает ваш таймер?
2) Почему if терпит неудачу - и почему вы сравниваете строки? Одна из сторон является строкой только потому, что вы преобразовали числовое значение в строку, а другая - это случайное значение, которое, по-видимому, является переменной уровня класса, установленной в другом месте, которую вы также преобразуете в строку, но мы понятия не имеем, что там находится. f для начала. И ценность в f это важно здесь, потому что в конечном счете именно он решает, будет ли показано изображение или нет (среди прочего). Но мы понятия не имеем, что это такое...

Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Member 13378284

Я думаю, что это сработало, когда я заменил этот код if (f.ToString() == listView1.Предметы[w].Подпункты[6]. текст) с этим
if (timeSinceStart[w].TotalSeconds >= f& & amp; timeSinceStart[w].TotalSeconds <= f + 1)

Member 13378284

как будто я поймал в ловушку ту ценность, которая мне нужна, или что-то в этом роде. Извините, я не так хорошо знаком с жаргоном компьютерного англ. / И. Т. и т. д.

Member 13378284

во всяком случае, отладчик + точка останова, о которой вы говорили, были очень полезны

OriginalGriff

Это чертовски хороший инструмент-привыкайте к нему, он может сделать всю вашу жизнь намного проще!