Member 13451441 Ответов: 3

Как получить возврат результата от staic funtions в статическом классе?


Меня смущает ошибка в следующем коде:
public static class PublicFunct
{
        public static bool CheckTxtIsNull(Control ctrl)
        {
            bool x;
            
            if (ctrl.GetType() == typeof(TextBox))
            {
                if (ctrl.Text == null || ctrl.Text == "")
                    x = false;
                else
                    x = true;                
            }
                    
            foreach (Control ctrlChild in ctrl.Controls)
            {
                CheckTxtIsNull(ctrlChild);
            }
            
            return x;
        }

Ошибка CS0165 использование неназначенной локальной переменной 'x'

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

Я не могу устранить ошибку. Помогите мне, пожалуйста. Спасибо!

Dotnet_Dotnet

sir simple define bool x = false;

public static bool CheckTxtIsNull(Control ctrl)
{
bool x = false;

если (ctrl.GetType() == typeof(текстовое поле))
{
если (ctrl.Text == null || ctrl.Текст == "")
x = ложь;
еще
х = истина;
}

по каждому элементу (контроль ctrlChild в клавиши Ctrl.Управления)
{
CheckTxtIsNull(ctrlChild);
}

вернуться х;
}

3 Ответов

Рейтинг:
6

Member 13451441

Я старался и достиг цели
Проверить все TextBox на форму, если текстовое поле значение null/пустой, чтобы быть курсор на место, нуль.
Messagebox и перерыв;
ПО ФОРМЕ

namespace LabWinForm
{
    public partial class frmTxtNull : Form
    {
        public frmTxtNull()
        {
            InitializeComponent();
        }

        
        private void btnCheckNull_Click(object sender, EventArgs e)
        {
			///1 - Browse all control
            foreach (Control item in this.Controls)
            {
				///2 - If control is textbox is call static funtion (CheckTxtNull) at class PublicFunct
                if (item.GetType() == typeof(TextBox))
                {
					///3 - If result = True then break;
                    if (iBookFunct.CheckTxtNull(item))
                        return;
                }
            }
			///4 - Execute when all textbox not null/empty
            MessageBox.Show("Hello world");
        }

    }	
}

В СТАТИЧЕСКОМ КЛАССЕ
namespace LabWinForm
	public static class PublicFunct
    {
        /// <summary>
        /// Check textbox control is null or empty
        /// </summary>
        /// <param name="ctrl">control textbox</param>
        /// <returns></returns>
        public static bool CheckTxtNull(Control ctrl)
        {
            bool result;
            if (string.IsNullOrEmpty(ctrl.Text))
            {
                MessageBox.Show("Data fields should not be blank.");
                result = true;
                ctrl.Focus();
            }

            else
            {
                result = false;
            }
            return result;
        }


    }


Спасибо всем!


Рейтинг:
2

Thomas Daniels

x получает назначение только в том случае, если ctrl.GetType() == typeof(TextBox) это правда (потому что все операции присваивания происходят внутри этого if блок). Если это ложь, x останется неназначенным, и именно поэтому произойдет ошибка. Обязательно назначьте что-нибудь x также, если это утверждение ложно.

(И, не имея отношения к ошибке, возможно, вы знаете, но все равно стоит отметить: Вы рекурсивно запускаете CheckTxtIsNull в foreach но вы ничего не делаете с этим возвращаемым значением, так что вызов функции в данный момент совершенно бесполезен).


Member 13451441

Спасибо за ответ.
Я исправил то же самое решение 2, но это невозможно.

Thomas Daniels

Ухх.. что именно невозможно?

Рейтинг:
1

Sagar Tajpara

Просто определите свою логическую переменную как

bool x = false вместо bool x;

public static class PublicFunct
        {
            public static bool CheckTxtIsNull(Control ctrl)
            {
                bool x = false;

                if (ctrl.GetType() == typeof(TextBox))
                {
                    if (ctrl.Text == null || ctrl.Text == "")
                        x = false;
                    else
                        x = true;
                }

                foreach (Control ctrlChild in ctrl.Controls)
                {
                    CheckTxtIsNull(ctrlChild);
                }

                return x;
            }
        }