开发者

Why do I get a blank form when I debug in C#?

i just got rid of all my compiler errors. One of the problems was that I accidentally renamed the visual form itself instead of one of the individual text boxes on my GUI. When I went to change what I had messed up in the code, it seemed to be working again. However, whenever I hit F5 to debug, I get a smaller, blank window as my GUI, and not the one that I had designed in Visual Studio. Any suggestions?

Here's my main (Forms) class code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace beehive1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Worker[] workers = new Worker[4];

        workers[0] = new Worker(new string[] { "Nectar collector", "Honey Manufacturing" });
        workers[1] = new Worker(new string[] { "Egg Care", "Baby Bee Tutoring" });
        workers[2] = new Worker(new string[] { "Hive Maintenance", "Sting Patrol" });
        workers[3] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing",
            "Egg Care", "Baby Bee Manufacturing", "Hive Maintenance", "Sting Patrol" });


        queen = new Queen(workers);
    }

    Queen queen;

    private void assignJob_Click(object sender, EventArgs e)
    {
        if (queen.AssignWork(workerBeeJob.Text, (int)shifts.Value) == false)
            MessageBox.Show("No Workers Are Available To Do The Job " + workerBeeJob.Text + "", "The Queen Bee Says...");
        else
            MessageBox.Show("The job " + workerBeeJob.Text + " will be done in " + shifts.Value + " shifts", "The Queen Bee Says...");

    }

    private void button2_Click(object sender, EventArgs e)
    {
        report.Text = queen.WorkTheNextShift();
    }
}
}

EDIT: Designer Code:

namespace beehive1
{
partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.shiftLabel = new System.Windows.Forms.Label();
        this.workerBeeJob = new System.Windows.Forms.ComboBox();
        this.jobLabel = new System.Windows.Forms.Label();
        this.shifts = new System.Windows.Forms.NumericUpDown();
        this.groupBox1 = new System.Windows.Forms.GroupBox();
        this.assignJob = new System.Windows.Forms.Button();
        this.nextShift = new System.Windows.Forms.Button();
        this.report = new System.Windows.Forms.TextBox();
        ((System.ComponentModel.ISupportInitialize)(this.shifts)).BeginInit();
        this.groupBox1.SuspendLayout();
        this.SuspendLayout();
        // 
        // shiftLabel
        // 
        this.shiftLabel.AutoSize = true;
        this.shiftLabel.Location = new System.Drawing.Point(287, 26);
        this.shiftLabel.Name = "shiftLabel";
        this.shiftLabel.Size = new System.Drawing.Size(33, 13);
        this.shiftLabel.TabIndex = 0;
        this.shiftLabel.Text = "Shifts";
        // 
        // workerBeeJob
        // 
        this.workerBeeJob.FormattingEnabled = true;
        this.workerBeeJob.Location = new System.Drawing.Point(27, 42);
        this.workerBeeJob.Name = "workerBeeJob";
        this.workerBeeJob.Size = new System.Drawing.Size(121, 21);
        this.workerBeeJob.TabIndex = 1;
        // 
        // jobLabel
        // 
        this.jobLabel.AutoSize = true;
        this.jobLabel.Location = new System.Drawing.Point(24, 26);
        this.jobLabel.Name = "jobLabel";
        this.jobLabel.Size = new System.Drawing.Size(84, 13);
        this.jobLabel.TabIndex = 2;
        this.jobLabel.Text = "Worker Bee Job";
        // 
        // shifts
        // 
        this.shifts.Location = new System.Drawing.Point(290, 42);
        this.shifts.Name = "shifts";
        this.shifts.Size = new System.Drawing.Size(74, 20);
        this.shifts.TabIndex = 3;
        // 
        // groupBox1
        // 
        this.groupBox1.Controls.Add(this.assignJob);
        this.groupBox1.Controls.Add(this.shiftLabel);
        this.groupBox1.Controls.Add(this.workerBeeJob);
        开发者_如何学JAVAthis.groupBox1.Controls.Add(this.jobLabel);
        this.groupBox1.Controls.Add(this.shifts);
        this.groupBox1.Location = new System.Drawing.Point(32, 12);
        this.groupBox1.Name = "groupBox1";
        this.groupBox1.Size = new System.Drawing.Size(384, 150);
        this.groupBox1.TabIndex = 4;
        this.groupBox1.TabStop = false;
        this.groupBox1.Text = "Worker Bee Job Assignments";
        // 
        // assignJob
        // 
        this.assignJob.Location = new System.Drawing.Point(27, 70);
        this.assignJob.Name = "assignJob";
        this.assignJob.Size = new System.Drawing.Size(121, 23);
        this.assignJob.TabIndex = 4;
        this.assignJob.Text = "Assign This Job";
        this.assignJob.UseVisualStyleBackColor = true;
        this.assignJob.Click += new System.EventHandler(this.assignJob_Click);
        // 
        // nextShift
        // 
        this.nextShift.Location = new System.Drawing.Point(422, 38);
        this.nextShift.Name = "nextShift";
        this.nextShift.Size = new System.Drawing.Size(79, 77);
        this.nextShift.TabIndex = 5;
        this.nextShift.Text = "Work The Next Shift";
        this.nextShift.UseVisualStyleBackColor = true;
        this.nextShift.Click += new System.EventHandler(this.button2_Click);
        // 
        // report
        // 
        this.report.Location = new System.Drawing.Point(32, 199);
        this.report.Multiline = true;
        this.report.Name = "report";
        this.report.Size = new System.Drawing.Size(384, 157);
        this.report.TabIndex = 6;
        // 
        // Form
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(539, 398);
        this.Controls.Add(this.report);
        this.Controls.Add(this.nextShift);
        this.Controls.Add(this.groupBox1);
        this.Name = "Form";
        this.Text = "Beehive Management System";
        ((System.ComponentModel.ISupportInitialize)(this.shifts)).EndInit();
        this.groupBox1.ResumeLayout(false);
        this.groupBox1.PerformLayout();
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.Label shiftLabel;
    private System.Windows.Forms.ComboBox workerBeeJob;
    private System.Windows.Forms.Label jobLabel;
    private System.Windows.Forms.NumericUpDown shifts;
    private System.Windows.Forms.GroupBox groupBox1;
    private System.Windows.Forms.Button assignJob;
    private System.Windows.Forms.Button nextShift;
    private System.Windows.Forms.TextBox report;
}
}

Maybe the application is no longer connected to that Form class? I've tried a Clean Build and a ReBuild, but it hasn't seemed to work.


Blank form means that InitializeComponent() isn't acivated or this.Controls.Add doesn't add the controls properly. try to debug step by step and activate all CLR exception to make sure no exception is occuring in the constructor. show us the construction of the form also.

Edit:

Why do I get a blank form when I debug in C#?

this should be checked not checked of as seen above. now run your form in debug mode and see if any excecptions occur. please add how you call your form meaning:

Form1 newForm=new Form1();


Check if you construct a Form (new Form()) instance instead of Form1() in your Main method.


Sometimes visual studio gets buggy (for example when renaming your project/form/directory). I was struggeling with this myself until I discovered that the:

this.Controls.Add(*form object name*); 

lines where missing in the Form1.Designer.cs file. These are "auto generated" lines, but apparently the auto generation doesn't always go well.

I wrote a little quick and dirty python script that tries to fix this. Place the script into a new directory together with a copy of your xxx.Designer.cs file and run it. It will generate a perhaps fixed xxx.Designer.cs.fix file. Saves a lot of manual copy pasting.

import os

#get current dir from which the script runs (should also contain the xxx.Designer.cs file)
daDir = os.path.dirname(os.path.abspath(__file__))

#the file extension we're looking for
ext = ".Designer.cs"

#list of all files in the dir from which the script runs
FileList = os.listdir(daDir)

FileToOpen = ""
ObjNameStr = ""
OriginalFileName = "SORRY, AUTO FIXING FAILED"

#the file to open (any first match for .Designer.cs)
for str in FileList:
    if (str.endswith(ext)):
        OriginalFileName = str
        FileToOpen = daDir + "\\" + str
        break

if FileToOpen != "":
    print("File found: " + FileToOpen)
    fileToFix = open(FileToOpen, 'r')

    FormObjStrList = []

    for str in fileToFix:
        # remove whitepaces/leading tabs
        str = str.lstrip()
        # get first part of string: "this.formobjectName"
        str = str.partition(' ')[0]
        if str.startswith("this.") and (str.count('.') == 1):
            ObjNameStr = str
            #add Form object to list if unique:
            if (ObjNameStr not in FormObjStrList) and ("this.components" not in ObjNameStr):
                #No more objects after SuspendLayout property
                if ("this.SuspendLayout" in ObjNameStr):
                    break
                else:
                    FormObjStrList.append("this.Controls.Add(" + ObjNameStr + ");")

    # copy original file to a stringlist that will be the fixed file
    FixedFile = fileToFix.read().splitlines()

    # look op the location to copy the new string list into
    i = 0
    for str in FixedFile:
        if ("this.AutoScaleMode" in str):
            break
        i += 1

    i += 1
    # Create the new xxx.Designer.cs fixed file by adding the extra generated lines
    for str in FormObjStrList:
        FixedFile.insert(i, str)

else:
    print("No fixable file found. ")

print(FormObjStrList)

# Save the new fixed file (manually check/correct this)
FixedFileSave = open(OriginalFileName + ".fix", 'w')
FixedFileSave.write("\n".join(FixedFile))
FixedFileSave.close()

print("New fixed file saved as: " + OriginalFileName + ".fix")
print("Please manually check if the generated file is correct for your project.")
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜