标签: windows-forms-designer

如何在保持Designer满意的同时将依赖注入应用于UserControl视图?

public class StatisticsViewPresenter
{
    private IStatisticsView view;
    private Statistics statsModel;

    public StatisticsViewPresenter(IStatisticsView view, Statistics statsModel)
    {
        this.view = view;
        this.statsModel = statsModel;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不使用事件(但我愿意,如果它可以解决我的问题),所以我的View类看起来像这样:

public class StatisticsForm : Form, IStatisticsView
{
    public StatisticsForm()
    {
        InitializeComponent();
    }

    [Inject]
    public StatisticsViewPresenter Presenter
    {
        private get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

kernel.Bind<StatisticsPresenter>().ToSelf().InSingletonScope();
kernel.Bind<IStatisticsView>().To<StatisticsForm>();
kernel.Get<IStatisticsView>();
Run Code Online (Sandbox Code Playgroud)

它构建表单,构建演示者,然后将演示者注入Presenter属性.一切都很好看.(除了那个单例范围的演示者 - 有关更好的方法的任何想法吗?也许只是手动将演示者注入到演示者的构造函数中的视图的Presenter属性中:this.view.Presenter = this).

但是如果我将StatisticsForm转换为StatisticsUserControl并将其拖放到我的MainForm上,它就不会被Ninject注入到MainForm中,它只是由Designer新设计的.我在这看到三个解决方案:

1)不要使用UserControls,只使用一个实现这些多视图的巨型表单(eww);

2)将UserControls注入我的表单并失去Designer支持;

3)你的解决方案!:)

c# user-controls dependency-injection ninject windows-forms-designer

6
推荐指数
1
解决办法
1913
查看次数

从抽象类继承的Usercontrol

我有一个继承自抽象类的usercontrol.基本上看起来像这样.

class SimpleSlideView : View
{

}

public abstract class View : UserControl
{

}
Run Code Online (Sandbox Code Playgroud)

该项目编译并运行良好.我可以使用usercontrol(从工具箱中)并将其拖动到表单中,并在设计器中正确显示.但是,如果我尝试SimpleSlideView在设计器中打开控件本身,则会收到以下错误:

设计者必须创建一个类型为"Animation.View"的实例,但它不能,因为该类型被声明为abstract.

我错过了什么?

c# abstract-class designer windows-forms-designer

6
推荐指数
1
解决办法
9194
查看次数

表单在运行时可见,但在设计时不可见

我的项目没有错误,我可以通过F5运行它,但我无法查看我的"主"表单,因为[设计]选项卡告诉我,"为了防止在加载设计器之前可能的数据丢失,必须解决以下错误:类名"?"不是此语言的有效标识符."

但是包含该描述的错误列表表明它位于第0行和第0列.

建立| 清洁解决方案没有帮助.

[Design]页面中的Call Stack是:

at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.CodeTypeDeclarationFromCodeClass(CodeClass vsClass)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnNamespacePopulateTypes(Object sender, EventArgs e)
at System.CodeDom.CodeNamespace.get_Types()
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.Parse(TextReader codeStream)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.MergedCodeDomParser.System.CodeDom.Compiler.ICodeParser.Parse(TextReader stream)
at System.CodeDom.Compiler.CodeDomProvider.Parse(TextReader codeStream)
at Microsoft.VisualStudio.Shell.Design.Serialization.CodeDom.CodeDomDocDataAdapter.get_CompileUnit()
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
Run Code Online (Sandbox Code Playgroud)

UPDATE

关闭VS2010并重新启动解决了它.

这里:http://msdn.microsoft.com/query/dev10.query?appId = Dev10IDEF1&l = EN-US&k = k(WHYDTELPAGE)%3bk(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3DdV4.0%22)&rd =真正

我找到了一些建议,包括这个建议(但我不需要尝试它,因为在回来工作之前让VS进入它的房间一两分钟):

"删除包含前一个会话中的设计器布局信息的[solutionname] .suo文件,然后启动项目并重建.."

c# visual-studio-2010 windows-forms-designer winforms

6
推荐指数
1
解决办法
4849
查看次数

自定义控件不会在Visual Studio Designer中更新

我正在创建一个自定义控件来设置单选按钮(不,它不一定是单选按钮.我只是想学习如何做到这一点,所以我可以制作一些更复杂的东西,可能包含多个通过Items属性添加的控件列表(类似于其他一些控件).

我可以构建项目,将其从组件面板拖到窗体上,并通过Items属性添加单选按钮.不幸的是,除非您要么:

  • 重建项目2-3次
  • 关闭并重新打开设计器中的表单

起初我有一个逻辑,在Initialize之后将它们放在构造函数中包含的表单上但是没有用,所以我转到了Form_Load.

我错过了什么?以上选项只是短期解决方法,而不是解决方案.

RBLTest.cs

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

namespace WFCL_Library
{
    public partial class RBLTest : UserControl
    {
        private List<RadioButton> _items;

        private int leftSpacing = 100;
        private int topSpacing = 25;

        public RBLTest()
        {
            _items = new List<RadioButton>();
            InitializeComponent();
        }

        private void RadioButtonList_Load(object sender, EventArgs e)
        {
            int curLeftPos = 0;
            int curTopPos = 0;
            foreach (RadioButton rb in _items)
            {
                rb.Location = new Point(curLeftPos, …
Run Code Online (Sandbox Code Playgroud)

c# .net-3.5 visual-studio-2008 windows-forms-designer winforms

6
推荐指数
1
解决办法
4247
查看次数

如何隐藏窗体中的所有面板?

在我的使用菜单条和多个面板容器的Windows应用程序中,根据菜单选项显示一个面板

通过手动传递名称隐藏所有面板非常耗时,有没有办法隐藏所有面板或任何方式来获取表单中所有面板的名称?

c# windows-forms-designer visual-c#-express-2010 visual-studio-2012

6
推荐指数
2
解决办法
5917
查看次数

在C#中编写表单时无法查看设计器

我正在关注winforms的这个教程,到目前为止,教程正在编写表单而不使用工具箱.我相信它很快就会更深入地介绍工具箱.

在本教程之后,我在以下两段代码中进行了部分类:

第一档:

using System;
using System.Windows.Forms;

public class Numeric : System.Windows.Forms.TextBox
{
    public Numeric()
    {
    }
}

public partial class Exercise
{
    private Numeric txtbox;
    System.ComponentModel.Container components;
}
Run Code Online (Sandbox Code Playgroud)

第二档:

using System;
using System.Windows.Forms;

public partial class Exercise : Form
{
    private void InitializeComponent()
    {
        txtbox = new Numeric();
        Controls.Add(txtbox);
    }

    public Exercise()
    {
        InitializeComponent();
    }
}

public class program
{
    public static int Main()
    {
        Application.Run(new Exercise());
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我用F5运行代码时,一切看起来都很好:表单弹出文本框.

但出于某种原因,当我右键单击第二个文件并选择"视图设计器"时,我收到一条错误,上面写着"变量'txtbox'未声明或未被分配".我可以选择"忽略并继续",这会将我引导到一个没有文本框的表单.

为什么会这样?我知道有些人认为我应该使用工具箱,这可能是最明智的做法,但我仍然想知道为什么会这样.

.net c# windows-forms-designer visual-studio winforms

6
推荐指数
1
解决办法
9252
查看次数

在UserControl中公开DataGridView的Columns属性,并使其可以通过Designer编辑

简短的介绍:

我有一个带有DataGridView的UserControl。我想向设计者公开DataGridView Columns集合,因此我可以在设计时更改用户控件上的列。

问:为此,我需要哪些设计师属性?

对于那些对较长版本感兴趣的人:

我有一个具有以下功能的UserControl:

  • 一个DataGridView,它显示集合中项目的“页面”。
  • NumericUpdown控件以选择要显示的页面。
  • 向上翻页/向下翻页按钮,当显示首页/最后一页时将禁用
  • 对显示项目的更改以视觉方式标记
  • 用于保存/放弃更改的按钮。

该用户控件可以自主运行。它具有父控件要使用的一个功能:

  • 显示页面(要显示的项目集合)

UserControl引发两个事件:

  • 事件页面已更改(具有页码)。应该导致加载新页面
  • 事件保存项(带有更改项的集合)

我必须以几种形式显示此用户控件。唯一的区别是每个表格的DataGridViewColumn集合不同。

我可以以编程方式添加列,但是使用设计器创建列会更容易。

c# user-controls datagridview windows-forms-designer winforms

6
推荐指数
1
解决办法
1091
查看次数

VS Designer错误:GenericArguments [0],'Y'上的'X'违反了类型参数'Z'的约束

我正在尝试创建从"泛型"基类继承的表单,其中该基类的泛型参数具有必须实现我的一个接口的约束.

它编译并运行得很好.我的问题在于Visual Studio设计器.它将打开表单,直到我重建项目,然后在尝试查看表单设计器时报告下面的错误,直到我重新启动Visual Studio,或删除基类中的自定义接口约束.

GenericArguments[0], 'InterfaceInBaseClassProblem.TestEntity', on 'InterfaceInBaseClassProblem.BaseWindowClass`1[EntityType]' violates the constraint of type 'EntityType'.
Run Code Online (Sandbox Code Playgroud)

第1步:创建一个界面

namespace InterfaceInBaseClassProblem
{
    public interface ITestInterface
    {
        void Func1();
    }
}
Run Code Online (Sandbox Code Playgroud)

第2步:创建一个实现接口的类

namespace InterfaceInBaseClassProblem
{
    public class TestEntity : ITestInterface
    {
        public void Func1()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

步骤3:创建一个通用基类Form,它需要一个通用参数约束,要求实现我们创建的接口

using System.Windows.Forms;
namespace InterfaceInBaseClassProblem
{
    public class BaseWindowClass<EntityType> : Form where EntityType : ITestInterface
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

第4步:现在创建一个继承自Generic Base Form的新表单,并使用TestEntity类作为参数

namespace InterfaceInBaseClassProblem
{
    public partial class Form1 : BaseWindowClass<TestEntity>
    {
        public Form1()
        {
            InitializeComponent();
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# generics type-constraints windows-forms-designer visual-studio

6
推荐指数
1
解决办法
546
查看次数

将 C# Windows 表单代码转换为 C# Android 代码

我最近使用 Visual Studio 在 Windows 窗体中制作了一个程序,但我的朋友要求我为其制作一个应用程序。然后我注意到 Visual Studio 使得直接用 C# 制作应用程序成为可能。但是当我打开一个新项目时,它与我习惯的不同(显然)。

我正在寻找一种简单的方法来将我的旧 Windows 窗体代码转换为 Android 格式,但由于我通常是编程新手,所以我自己也不知道如何。你们有什么建议或好的教程可以帮助我吗?我一直在谷歌上搜索,但没有找到任何对我有帮助的东西。

c# android code-conversion windows-forms-designer

5
推荐指数
1
解决办法
8872
查看次数

虚拟键盘(类似 Swype 键盘)Windows 窗体应用程序 C#

我正在尝试使用 c# 在 Windows 窗体中创建一个类似 swype 的键盘

在此输入图像描述

我有两个问题:我无法重现手指滑动动作。b. 我无法识别不同按键下的字母。

对于第一个问题:

我使用了 Graphics 类和 Pen 类,并像这样使用它:

    bool draw;
    Graphics g;
    Pen p;
    int prevX;
    int prevY;

    private void Form1_Load(object sender, EventArgs e)
    {
        draw = false;
        g = CreateGraphics();
        p = new Pen(Color.Black, 2);
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        draw = true;
        prevX = e.X;
        prevY = e.Y;
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        draw = false;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

.net c# windows-forms-designer winforms

5
推荐指数
1
解决办法
1377
查看次数