0

как мне пофиксить ошибку "Ошибка CS0103 Имя "SoC" не существует в текущем контексте." знакомый мне сказал сделать ссылку, но как ее сделать я без понятия


namespace Killer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Process[] SoC;
            SoC = Process.GetProcessesByName("XR_3DA.exe");
        }
    private void kill_Click(object sender, EventArgs e)
    {
        foreach (Process SoC1 in SoC)
        {
            SoC1.CloseMainWindow();
        }
    }
}

}

  • @EvgeniyZ при чем здесь "другая форма"? :) – aepot Nov 19 '20 at 12:20
  • 2
    @aepot Там заголовок вопроса такой, сам ответ разжовывает разные мелочи по доступу к переменным, включая ту, что у автора в вопросе (цитата: Вопрос: А сможем ли мы получить доступ MyField из других классов, методов и др.?) – EvgeniyZ Nov 19 '20 at 12:22
  • 1
    Еще автору на заметку – aepot Nov 19 '20 at 12:27

2 Answers2

1

Вам нужно объявить переменную SoC не в конструктора, а в классе, тогда она будет доступна:

namespace Killer
{
    public partial class Form1 : Form
    {
        private Process[] SoC;
    public Form1()
    {
        InitializeComponent();            
        SoC = Process.GetProcessesByName("XR_3DA.exe");
    }

    private void kill_Click(object sender, EventArgs e)
    {
        foreach (Process SoC1 in SoC)
        {
            SoC1.CloseMainWindow();
        }
    }
}

}

1

Поля в C#.

public partial class Form1 : Form
{
    private Process[] SoC;
public Form1()
{
    InitializeComponent();    
    SoC = Process.GetProcessesByName("XR_3DA.exe");
}

private void kill_Click(object sender, EventArgs e)
{
    foreach (Process SoC1 in SoC)
    {
        SoC1.CloseMainWindow();
    }
}

}

Дополнительно, крайне не рекомендуется вставлять свой код в конструктор формы. Рекомендую использовать обработчик события Form.Load для этого.

Исправленный код будет выглядеть так:

public partial class Form1 : Form
{
    private Process[] SoC;
public Form1()
{
    InitializeComponent();    
    this.Load += Form1_Load; // вместо этой строчки можете назначить обработчик в дизайнере, а строчку убрать
}

private void Form1_Load(object sender, EventArgs e)
{
    SoC = Process.GetProcessesByName("XR_3DA.exe");
}

private void kill_Click(object sender, EventArgs e)
{
    foreach (Process SoC1 in SoC)
    {
        SoC1.CloseMainWindow();
    }
}

}

aepot
  • 49,560