创建状态栏?

时间:2014-03-10 20:06:31

标签: c# .net-3.5 statusbar

我使用C#脚本将表中的行从一个服务器移动到另一个服务器。请不要告诉 我为此使用SSIS组件。我正在使用循环传入的数据集 一个for循环,我想看到当前的迭代,即GUI中的循环索引 框。我可以使用MessageBox.Show("Text"),但我需要按ok / cancel来允许 代码继续。所以,我想过使用状态栏。我试过了an example I got online

示例(下面)中的行this.Controls.Add(mainStatusBar);会导致错误 -

  

csproj.ScriptMain'不包含'Controls'的定义       没有扩展方法'控件'接受第一个类型的参数       可以找到'.csproj.ScriptMain'(你是否缺少using指令       或汇编参考?)

尽管添加了引用 - System.Windows.Forms.dll并执行了操作,但仍会发生这种情况 全部保存(即Ctrl+Shift+S)。该脚本使用System.Windows.Forms;导入 已经。

为什么我会收到此错误,如何解决?

代码 -

protected StatusBar mainStatusBar = new StatusBar();
protected StatusBarPanel statusPanel = new StatusBarPanel();
protected StatusBarPanel datetimePanel = new StatusBarPanel();

private void CreateStatusBar()
{
    // Set first panel properties and add to StatusBar
    statusPanel.BorderStyle = StatusBarPanelBorderStyle.Sunken;
    statusPanel.Text = "Application started. No action yet.";
    statusPanel.ToolTipText = "Last Activity";
    statusPanel.AutoSize = StatusBarPanelAutoSize.Spring;
    mainStatusBar.Panels.Add(statusPanel);

    // Set second panel properties and add to StatusBar
    datetimePanel.BorderStyle = StatusBarPanelBorderStyle.Raised;
    datetimePanel.ToolTipText = "DateTime: " + 
    System.DateTime.Today.ToString();
    datetimePanel.Text = System.DateTime.Today.ToLongDateString();
    datetimePanel.AutoSize = StatusBarPanelAutoSize.Contents;
    mainStatusBar.Panels.Add(datetimePanel);

    mainStatusBar.ShowPanels = true;
    // Add StatusBar to Form controls
    this.Controls.Add(mainStatusBar);

}

private void button1_Click(object sender, EventArgs e)
{
    statusPanel.Text = "Button is clicked.";
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    statusPanel.Text = "CheckBox is checked.";
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    statusPanel.Text = "TextBox edited.";
}

3 个答案:

答案 0 :(得分:2)

该程序并不知道this应该引用此声明中的表单this.Controls.Add(mainStatusBar);

你必须按照百分比建议的方式去做。

使用它的正确方法是这样的:

For Instance

public partial class someForm : Form
    {
        public someForm()
        {
            InitializeComponent();
        }
    }

partial class someForm
    {
        private void InitializeComponent()
            {
                this.mainStatusBar = new StatusBar();
            }
    }

另外,请看一下这篇文章:

When do you use the "this" keyword?

答案 1 :(得分:1)

如果您在SQL Server上运行脚本,则无法在脚本中添加控件,因为您没有窗口。

您可以做的是创建一个独立的GUI应用程序,它将与您的脚本通信(例如通过TCP)。

或者,您可以在执行一次迭代时创建文件并向其添加新文本。

使用mTail实时查看文件中发生的情况。

mTail - http://ophilipp.free.fr/op_tail.htm

答案 2 :(得分:1)

您使用的课​​程没有Controls,因为它不是Form

您可以通过以下方式创建Form并为其添加状态栏:

替换

this.Controls.Add(mainStatusBar);

使用

Form window = new Form();
window.Controls.Add(mainStatusBar);
window.ShowDialog();

最后一行将显示包含状态栏的窗口。