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
我有一个继承自抽象类的usercontrol.基本上看起来像这样.
class SimpleSlideView : View
{
}
public abstract class View : UserControl
{
}
Run Code Online (Sandbox Code Playgroud)
该项目编译并运行良好.我可以使用usercontrol(从工具箱中)并将其拖动到表单中,并在设计器中正确显示.但是,如果我尝试SimpleSlideView在设计器中打开控件本身,则会收到以下错误:
设计者必须创建一个类型为"Animation.View"的实例,但它不能,因为该类型被声明为abstract.
我错过了什么?
我的项目没有错误,我可以通过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)
关闭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文件,然后启动项目并重建.."
我正在创建一个自定义控件来设置单选按钮(不,它不一定是单选按钮.我只是想学习如何做到这一点,所以我可以制作一些更复杂的东西,可能包含多个通过Items属性添加的控件列表(类似于其他一些控件).
我可以构建项目,将其从组件面板拖到窗体上,并通过Items属性添加单选按钮.不幸的是,除非您要么:
起初我有一个逻辑,在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
在我的使用菜单条和多个面板容器的Windows应用程序中,根据菜单选项显示一个面板
通过手动传递名称隐藏所有面板非常耗时,有没有办法隐藏所有面板或任何方式来获取表单中所有面板的名称?
c# windows-forms-designer visual-c#-express-2010 visual-studio-2012
我正在关注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'未声明或未被分配".我可以选择"忽略并继续",这会将我引导到一个没有文本框的表单.
为什么会这样?我知道有些人认为我应该使用工具箱,这可能是最明智的做法,但我仍然想知道为什么会这样.
简短的介绍:
我有一个带有DataGridView的UserControl。我想向设计者公开DataGridView Columns集合,因此我可以在设计时更改用户控件上的列。
问:为此,我需要哪些设计师属性?
对于那些对较长版本感兴趣的人:
我有一个具有以下功能的UserControl:
该用户控件可以自主运行。它具有父控件要使用的一个功能:
UserControl引发两个事件:
我必须以几种形式显示此用户控件。唯一的区别是每个表格的DataGridViewColumn集合不同。
我可以以编程方式添加列,但是使用设计器创建列会更容易。
c# user-controls datagridview windows-forms-designer winforms
我正在尝试创建从"泛型"基类继承的表单,其中该基类的泛型参数具有必须实现我的一个接口的约束.
它编译并运行得很好.我的问题在于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
我最近使用 Visual Studio 在 Windows 窗体中制作了一个程序,但我的朋友要求我为其制作一个应用程序。然后我注意到 Visual Studio 使得直接用 C# 制作应用程序成为可能。但是当我打开一个新项目时,它与我习惯的不同(显然)。
我正在寻找一种简单的方法来将我的旧 Windows 窗体代码转换为 Android 格式,但由于我通常是编程新手,所以我自己也不知道如何。你们有什么建议或好的教程可以帮助我吗?我一直在谷歌上搜索,但没有找到任何对我有帮助的东西。
我正在尝试使用 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)