Загрузка решения Visual Studio дает необработанное исключение в конструкторе: «Не удалось найти часть пути (путь к файлу)» - PullRequest
0 голосов
/ 24 февраля 2019

Я загружаю свой проект и затем эти два окна всплывают одно за другим (я объясняю первое окно ниже):

First window

Second window

Но иногда второе окно, которое показывает это:

Second window

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

Я заметил, что если я загружаю свое решение, дважды щелкнув файл решения в проводнике файлов> расположение решения на диске (не в Visual Studio, файл> открыть), затем второе окно, которое показывает ссылки на диск G (мой перьевой диск, на котором есть решение).

Однако, если я загружаю решение, загружая Visual Studio, то выбираю файл> открыть и выбираю решение (на том же диске G) затем второе окно, которое показывает, ссылается на диск C.

Первое окно, которое показывает, предположительно, указывает, что метод вызывается в пользовательском элементе управления, который находится в главной форме, всякий раз, когдарешение загружено:

private void EndQuiz()
    {
        this.Visible = false;
        questionNumber = 1;
        MessageBox.Show("You finished the quiz with " + score + " score", "Complete");
        score = 0;
    }

Класс этого пользовательского элемента управления с методом EndQuiz () (вы найдете его примерно на полпути вниз):

public partial class QuizUC : UserControl
{
    public Label LabelTheme { get { return labelTheme; } }
    public Label LabelQuestionNumber { get { return labelQuestionNumber; } }
    public Label LabelQuestion { get { return labelQuestion; } }
    public Label LabelScore { get { return labelScore; } }

    public Button BtnOption1 { get { return btnOption1; } }
    public Button BtnOption2 { get { return btnOption2; } }
    public Button BtnOption3 { get { return btnOption3; } }
    public Button BtnOption4 { get { return btnOption4; } }

    public PictureBox PictureBox1 { get { return pictureBox1; } }

    Random rnd;
    Bitmap quizImage;

    public string correctAnswer;

    int correctAnswerNo = 0, questionsAsked = 0, questionNumber, rndQuestionNo, score;
    string question, answer;
    string[] individualAnswers;
    bool isOver = false;

    List<string> questions;
    List<int> usedQuestions;
    List<string> answers;

    private int _noOfQuestions;
    private string _selectedTheme = "";

    // quiz not loading on second time DONE
    // selected 5 questions, gave 6 DONE
    // duplicate questions
    // label question overlapping with buttons

    public QuizUC()
    {
        InitializeComponent();
    }

    public void ShowAll()
    {
        labelTheme.Show();
        labelQuestion.Show();
        labelQuestionNumber.Show();
        btnOption1.Show();
        btnOption2.Show();
        btnOption3.Show();
        btnOption4.Show();
        labelScore.Show();
        pictureBox1.Show();
    }

    public void SetUpVariables(int noOfQuestions, string selectedTheme)
    {
        _noOfQuestions = noOfQuestions < 5 || noOfQuestions > 15 ? 5 : noOfQuestions;
        _selectedTheme = selectedTheme ?? "";
    }

    private void QuizUC_VisibleChanged(object sender, EventArgs e)
    {
        if (this.Visible)
        {
            SetUpQuiz();
        }
    }

    private void QuizUC_Load(object sender, EventArgs e)
    {
        ReadQuestionsAndAnswersFromFile();
    }

    private void SetUpQuiz()
    {
        SetLabelSizes(); // question text will not go off the edge
        labelScore.Text = "Score: 0";
        SetTransparency();
        SetQuestionNumber();

        usedQuestions = new List<int>();

        questionsAsked = 0;
        questionNumber = 1;
        score = 0;

        RandomiseQuestion();
        labelTheme.Text = "Theme: Space";
        labelQuestionNumber.Text = $"Question number: {questionNumber}";

        quizImage = new Bitmap("solarsystem.jpg");
        pictureBox1.Image = quizImage;
    }

    private void ReadQuestionsAndAnswersFromFile()
    {
        string questionFile = "quiz/questions.txt", answerFile = "quiz/answers.txt";
        questions = File.ReadAllLines(questionFile).ToList();
        answers = File.ReadAllLines(answerFile).ToList();
    }

    private void SetLabelSizes()
    {
        labelQuestion.MaximumSize = new Size(labelQuestion.Width, 0);
        labelQuestion.AutoSize = true;
    }

    public void SetTransparency()
    {
        labelQuestion.BackColor = Color.Transparent;
        labelTheme.BackColor = Color.Transparent;
        labelQuestionNumber.BackColor = Color.Transparent;
        labelScore.BackColor = Color.Transparent;
    }

    public void SetQuestionNumber()
    {
        labelQuestionNumber.Text = "Question number: " + questionNumber;
    }

    private void EndQuiz()
    {
        this.Visible = false;
        questionNumber = 1;
        MessageBox.Show("You finished the quiz with " + score + " score", "Complete");
        score = 0;
    }

    public void ResetQuiz()
    {
        questionsAsked = 0;
        score = 0;
        labelScore.Text = "Score " + score;
        questionNumber = 1;
        questions = File.ReadAllLines("quiz/questions.txt").ToList();
        answers = File.ReadAllLines("quiz/answers.txt").ToList();
        usedQuestions.Clear();
    }

    public void RandomiseQuestion()
    {
        questionsAsked++;
        if (questionsAsked == _noOfQuestions + 1)
        {
            EndQuiz();
            ResetQuiz();
            return;
        }
        rnd = new Random();

        // ShowAll();
        rndQuestionNo = rnd.Next(0, questions.Count);

        question = questions.Count == 1 ? questions[0] : questions[rndQuestionNo];
        answer = answers[rndQuestionNo];

        questions.RemoveAt(rndQuestionNo);
        answers.RemoveAt(rndQuestionNo);

        individualAnswers = answer.Split(',');
        for (int i = 0; i < individualAnswers.Length; i++)
        {
            if (individualAnswers[i].Contains('*'))
            {
                correctAnswerNo = i;
            }
        }

        individualAnswers[correctAnswerNo] = individualAnswers[correctAnswerNo].Trim('*');
        correctAnswer = individualAnswers[correctAnswerNo];

        labelQuestion.Text = question;
        btnOption1.Text = individualAnswers[0];
        btnOption2.Text = individualAnswers[1];
        btnOption3.Text = individualAnswers[2];
        btnOption4.Text = individualAnswers[3];
    }

    private void IncreaseScore(int score)
    {
        labelScore.Text = "Score: " + score.ToString();
    }

    private bool CheckToReturn()
    {
        var noOfQuestions = Single.GetSingle().AskHowManyQuestionsForm.NoOfQuestions;

        if (questionNumber == noOfQuestions)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private void btnOption1_Click(object sender, EventArgs e)
    {
        if (btnOption1.Text == correctAnswer)
        {
            MessageBox.Show("Correct answer!", "Correct");
            questionNumber++;
            SetQuestionNumber();
            score++;
            IncreaseScore(score);
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
        else
        {
            MessageBox.Show("Incorrect answer!", "Incorrect");
            questionNumber++;
            SetQuestionNumber();
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
    }

    private void btnOption2_Click(object sender, EventArgs e)
    {
        if (btnOption2.Text == correctAnswer)
        {
            MessageBox.Show("Correct answer!", "Correct");
            questionNumber++;
            SetQuestionNumber();
            score++;
            IncreaseScore(score);
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
        else
        {
            MessageBox.Show("Incorrect answer!", "Incorrect");
            questionNumber++;
            SetQuestionNumber();
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
    }

    private void btnOption3_Click(object sender, EventArgs e)
    {
        if (btnOption3.Text == correctAnswer)
        {
            MessageBox.Show("Correct answer!", "Correct");
            questionNumber++;
            SetQuestionNumber();
            score++;
            IncreaseScore(score);
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
        else
        {
            MessageBox.Show("Incorrect answer!", "Incorrect");
            questionNumber++;
            SetQuestionNumber();
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
    }

    private void btnOption4_Click(object sender, EventArgs e)
    {
        if (btnOption4.Text == correctAnswer)
        {
            MessageBox.Show("Correct answer!", "Correct");
            questionNumber++;
            SetQuestionNumber();
            score++;
            IncreaseScore(score);
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
        else
        {
            MessageBox.Show("Incorrect answer!", "Incorrect");
            questionNumber++;
            SetQuestionNumber();
            isOver = CheckToReturn();
            RandomiseQuestion();
        }
    }
}

Всякий раз, когда я открываю окно дизайна меню в Visual Studio, этопоказывает:

Menu design error

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

Редактировать: проверить комментарии для получения дополнительной информации.

Кроме того, раньше у меня был серый фон здесь, но теперь форма выглядит так, с сообщением об ошибкепозади (я утащил другой элемент управления, не являющийся QuizUC, как объяснено в комментариях, он исчез из представления проекта):

Menu design screen error

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...