我正在制作一些控件,它们都必须共享相同的外观和一些常见的行为,尽管它们用于不同类型的输入.所以我创建了一个继承自UserControl的BaseClass,我的所有控件都继承自BaseClass.
但是,如果我在设计器中添加BaseClass的控件,例如TableLayoutPanel,我在设计继承的类时无法访问它们.我看到了TableLayoutPanel,但即使他是"受保护的",我也无法修改它或通过设计器将控件放入其中.我通过代码访问它没有任何问题,但我不想失去使用设计器的能力.
现在,我只是从BaseClass中删除了所有控件,在每个继承的类中添加了布局和所有常用控件,然后使用引用在BaseClass中操作它们.但这根本不能让我满意.有没有办法让设计师使用继承的受保护成员控件?
环境:C#,.NET 3.5,Visual Studio 2008
编辑回答SLaks的建议.我尝试设置一个属性,虽然我不习惯使用它,但它似乎不起作用.这是我试过的代码:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public TableLayoutPanel TableLayoutPanel1
{
get { return tableLayoutPanel1;}
set { tableLayoutPanel1 = value;}
}
}
public partial class UserControl2 : UserControl1
{
public UserControl2()
{
InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud) 有人知道如何将Lightbox 0.5与Galleriffic集成吗?(http://www.twospy.com/galleriffic/)
当您单击下载按钮/文本时,我希望图像在灯箱中打开.
Greatings,Bas
这是非常基本的东西,但是这里有.我发现我无法同意自己,将大型课程分成小型课程的方式是否使得课程更易于维护或更难以维护.我熟悉设计模式,虽然不是很详细,但也熟悉面向对象设计的概念.抛开所有花哨的规则和指导方针,我希望通过一个非常简单的示例场景来挑选我所缺少的内容.基本上是这样的:"......这种设计会让它变得更加困难"......等等......由于缺乏经验,所以我没有预料到的所有事情.
假设您需要编写基本的"文件读取器/文件编写器"样式类来处理某种类型的文件.我们将该文件称为YadaKungFoo文件.YadaKungFoo文件的内容基本上类似于INI文件,但有细微差别.
有部分和价值观:
[Sections]
Kung,Foo
Panda, Kongo
[AnotherSection]
Yada,Yada,Yada
Subtle,Difference,Here,Yes
[Dependencies]
PreProcess,SomeStuffToPreDo
PreProcess,MoreStuff
PostProcess,AfterEight
PostProcess,TheEndIsNear
PostProcess,TheEnd
Run Code Online (Sandbox Code Playgroud)
好的,所以这可以产生3个基本类:
public class YadaKungFooFile
public class YadaKungFooFileSection
public class YadaKungFooFileSectionValue
Run Code Online (Sandbox Code Playgroud)
后两个类本质上只是具有ToString()重写的数据结构,以吐出使用几个通用列表存储的值的字符串列表.这足以实现YadaKungFooFile保存功能.
所以随着时间的推移,YadaYadaFile开始增长.几种重载以不同的格式保存,包括XML等,文件开始推向800行左右.现在真正的问题是:我们想要添加一个功能来验证YadaKungFoo文件的内容.想到的第一件事显然是添加:
var yada = new YadaKungFooFile("C:\Path");
var res = yada .Validate()
Run Code Online (Sandbox Code Playgroud)
我们已经完成了(我们甚至可以从构造函数中调用该方法).麻烦的是验证非常复杂,并且使得类非常大,所以我们决定创建一个这样的新类:
var yada = new YadaKungFooFile("C:\Path");
var validator = new YadaKungFooFileValidator(yada);
var result = validator.Validate();
Run Code Online (Sandbox Code Playgroud)
现在这个样本显然非常简单,琐碎且微不足道.上述两种方式中的任何一种都可能不会产生太大的差异,但我不喜欢的是:
总而言之,我想我觉得我没有经验可以理解设计为什么不好的所有方面,在什么情况下它并不重要,哪些关注更重要:更小的类或更具凝聚力的类.他们似乎是矛盾的要求,但也许我错了.也许验证器类应该是一个复合对象?
基本上我要求就上述设计可能带来的好处/问题提出意见.有什么不同的做法?(基础FileValidator类,FileValidator接口等等.你的名字).想想YadaKungFooFile功能随着时间的推移不断增长.
关于Client Profile安装的最后一个问题.我下载了Microsoft .NET Framework Client Profile Online Installer,因为我们想将它放在安装CD中,因为我们的最终用户可能没有.net framework 3.5或Internet.所以我们希望能够处理这两种情况.
在先决条件中,我能够选择文件的位置,但我不知道它应该在哪里.我希望能够以某种方式放置CD的路径,例如d:\ ProductName\Prerequisites\DotNetFx35ClientSetup.exe,以便它可以获取它并从那里安装它.有没有人知道如何实现这一目标?
谢谢.
这是先决条件窗口:

我正在使用unix系统编程(robbins和robbins)开发shell如何添加此功能以及如何添加历史功能(如BASH中的历史功能 - 当我按下键时显示以前键入的命令)
将关键字作为可选标志实现到函数的最佳方法是什么?我想进行函数调用,例如:
(myfunction 5)
(myfunction 6 :do-this)
(myfunction 3 :go-here)
(myfunction 2 :do-this :do-that)
Run Code Online (Sandbox Code Playgroud)
使用defn,我可以定义一个函数,例如:
(defn myfunction [value & flags] ... )
Run Code Online (Sandbox Code Playgroud)
但这flags成了一个清单.我可以编写自己的函数来搜索列表,但是这样的函数不包含在核心库中,所以我认为它不是惯用的.
我现在用的是什么:
(defn flag-set? [list flag] (not (empty? (filter #(= flag %) list))))
(defn flag-add [list flag] (cons flag list))
(defn flag-remove [list flag] (filter #(not= flag %) list))
Run Code Online (Sandbox Code Playgroud) 从字符串中,我需要拉出与给定模式匹配的组.
示例字符串: <XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>
每组开始<XmlLrvs>和结束</XmlLrvs>.这是我的代码片段......
String patternStr = "(<XmlLrvs>.+?</XmlLrvs>)+";
// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(text);
matcher.matches();
// Get all groups for this match
for (int i = 1; i<=matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}
Run Code Online (Sandbox Code Playgroud)
输出是<XmlLrvs>Third</XmlLrvs>.我期待第一组和第二组,但那些没有被捕获.有人可以帮忙吗?
我与印度的几位开发人员合作,我们最大的困难之一是他们的变量命名.起初我非常沮丧,无法理解为什么他们不会恰当地命名事物(是懒惰吗?)但是,我意识到他们可能不习惯命名变量,因为他们读取的所有代码都在英语和他们阅读的英语单词对他们几乎没有意义.现在看来很明显,但如果你不能充分理解英语,就不可能很好地命名变量.
您将如何与外语团队成员更好地进行命名实践?
对不起,如果这有点主观,我已将其标记为社区维基.
谢谢!