我在Windows窗体中遇到了继承控件的问题,需要一些建议.
我确实为List中的项目(由面板构成的自制GUI列表)和一些可以添加到列表中的每种数据类型的继承控件使用基类.
它没有问题,但我现在发现,将基本控件变成抽象类是正确的,因为它有方法,需要在所有继承的控件中实现,从内部的代码调用base-control,但不能也不能在基类中实现.
当我将基本控件标记为抽象时,Visual Studio 2008 Designer拒绝加载窗口.
有没有办法让Designer使用基础控件制作抽象?
我需要从da数据绑定DataGridView获取当前选定的对象.
我不需要当前所选单元格的对象,而是整个行所基于的对象,在这种情况下,BusinessObject属性将构成网格的列.
我可以查看DataSource,但它本身只是一个对象,可以是BindingSource或IBindingList或类似的东西 - 所以不容易标准化的方式来获取想要的对象.
在此之后需要检查businessObject以获取名为IsChanged的属性,并在绑定源选择下一个项目之前要求用户保存或放弃更改.因此,我必须找出DataGridView的RowValidating-Event中的当前对象,因为BindingSource不提供在更改发生之前停止更改的事件.请参阅此处了解众所周知的问题
谢谢阅读 ;-)
我想向用户展示一个微调器,在后台完成某些操作,但不知道它在批处理文件中是如何工作的.
有人有线索吗?
有没有办法访问DebuggerDisplayAttribute运行时显示的字符串?
对于我们的业务对象,我尝试获取有关异常处理的自动调试器信息.捕获异常时使用的实际对象应序列化为文本以增强异常消息.由于某些属性具有其他业务对象作为类型,因此如果递归使用,这可能会变得非常长.因此,我想序列化只是已经在DebuggerDisplay类的属性中定义的信息.ToString()类的实现可能不同,不能用于此任务.
那么是否可以在运行时获取调试器中显示的字符串?
对于我的新宠物项目,我有一个设计问题,已经确定了,但我也想要其他一些意见.
我有两个类(简化):
class MyObject
{
string name {get;set;}
enum relation {get;set;}
int value {get;set;}
}
class MyObjectGroup
{
string name {get;set;}
enum relation {get;set;}
int value {get;set;}
List<MyObject> myobjects {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在项目后期MyObjectGroup,并MyObject应同等地使用.为此,我可以采取两种方式:
IObjectObjectBase我决定采用界面的方式,我后来在代码中不能ObjectBase每次都写,而IObject只是为了方便 - 但这种方式的其他积极因素是什么?
第二,如何增加IXmlSerializable整个故事呢?让接口继承IXmlSerializable或者它是否有更多的正面要IXmlSerializable在抽象基类中实现?
我不明白以下现象,有人可以解释一下我的错误吗?
public class BaseClass
{
public BaseClass()
{
BaseClass.Instance = this;
}
public static BaseClass Instance
{
get;
private set;
}
}
public class SubClassA : BaseClass
{
public SubClassA()
: base()
{ }
}
public class SubClassB : BaseClass
{
public SubClassB()
: base()
{ }
}
class Program
{
static void Main(string[] args)
{
SubClassA a = new SubClassA();
SubClassB b = new SubClassB();
Console.WriteLine(SubClassA.Instance.GetType());
Console.WriteLine(SubClassB.Instance.GetType());
Console.Read();
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,编译器应该通过继承生成一个新的Type,SubClassA和SubClassB实际上是拥有自己的静态变量的类型.但似乎该类的静态部分不是继承而是引用 - 我怎么会出错?
这是非常简单的事情(至少我猜),我只是没有得到线索.
我必须解析一个大型XML文档以获取一个特定节点,该节点由其子节点值之一标识.到目前为止这很容易.但是当我尝试从该节点向前解析时,通过使用谓词选择其祖先的前兄弟,我得到一个节点列表,从那里我必须再次向下走.
在Theorie中,这是一个表,有5列和2行(在下面的例子中).我得到一个字段的id元素,需要找到行的第一个字段中给出的名称.第一个字段始终为"链接"类型,并且具有带文本的名称子节点 - 这是要获取的内容.
换句话说,我需要从具有a的任何节点移动<id>XXX_X</i>到具有控制xsi:type='Label'名称和名称节点的下一个前兄弟单元格.从节点<id>MyItemId_1</>我需要获得第二个前面的兄弟节点,从<id>MyItemId_4</id>我需要获得第5个前面兄弟节点的节点.
这是一个示例xml片段:
<cell>
<control xsi:type="Label">
<id>1234</id>
<name>MyOtherItemName</name>
<message/>
</control>
<selected>false</selected>
<style>Odd</style>
</cell>
<cell>
<control xsi:type="Label">
<id>MyOtherItemId_0</id>
<name/>
<message/>
</control>
<selected>false</selected>
<style>Odd</style>
</cell>
<cell>
<control xsi:type="Label">
<id>MyOtherItemId_1</id>
<name/>
<message/>
</control>
<selected>false</selected>
<style>Odd</style>
</cell>
<cell>
<control xsi:type="Button">
<id>MyOtherItemId_2</id>
<name>552</name>
<message/>
<type>Link</type>
<selected>false</selected>
</control>
<selected>false</selected>
<style>Odd</style>
</cell>
<cell>
<control xsi:type="Button">
<id>MyOtherItemId_3</id>
<name>432</name>
<message/>
<type>Link</type>
<selected>false</selected>
</control>
<selected>false</selected>
<style>Odd</style>
</cell>
<cell>
<control xsi:type="Button">
<id>MyOtherItemId_4</id>
<name>33</name>
<message/>
<type>Link</type>
<selected>false</selected>
</control>
<selected>false</selected>
<style>Odd</style> …Run Code Online (Sandbox Code Playgroud) 我最近正在处理的一个代码被发现使用了大约200MB的内存来运行,我很困惑为什么它需要那么多。
基本上,它将一个文本文件映射到一个列表中,其中文件中的每个字符都是它自己的包含该字符的列表,以及到目前为止(从零开始)作为它的两个项目出现的频率。
所以'abbac...'会[['a','0'],['b','0'],['b','1'],['a','1'],['c','0'],...]
对于 100 万个字符长的文本文件,它使用了 200MB。
这是合理的还是我的代码正在做的其他事情?如果合理,是因为列表数量多吗?会[a,0,b,0,b,1,a,1,c,0...]占用更少的空间吗?
我确实需要一个加载对象列表的解决方案 - 查找其中只有一个属性从当前对象引用,如本例所示.
class LookupObjectAddress
{
[...]
public string City
{ get; set; }
[...]
}
class WorkingObject
{
// references the property from LookupObjectAddress
public string City
{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对于查找,我需要从数据库加载List,以了解从何处加载我使用Attribute的信息
class WorkingObject
{
// references the property from LookupObjectAddress
[Lookup(Type=typeof(LookupObjectAddress), staticloaderclass="LookupObjLoader", staticloaderMethod="LookupObjLoadMethod")]
public string City
{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在读出了WorkingObject.City属性的PropertyInfo之后,我知道了查找对象的类型,以及从哪个类加载它的方法.现在我需要桥接器来获取具有这三个参数的List.
Type loaderClass = Type.GetType(classname);
MethodInfo loaderMethod = loaderClass.GetMethod(loadmethod);
object objList = loaderMethod.Invoke(null, new object[] {});
Run Code Online (Sandbox Code Playgroud)
由于我需要使用类型化的List <>来在UI上使用LookupObjects的属性,我如何成为Code中的可用列表?
我理想的结果是,如果我可以输入:
var list = Loader.Load(type, "LookupObjLoader", "LookupObjLoadMethod");
Run Code Online (Sandbox Code Playgroud)
从Attribute中读取参数的位置.
只是对VisualStudio 2008编译器的快速提问.
我们确实已经启用了编译器警告被视为错误的工作正常,但今天我认识到,以下行为:
static void Main(string[] args)
{
int number = 0;
DateTime dateTime = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)
编译此代码段只会产生一个警告:"已分配变量'number',但永远不会使用其值".
任何人都可以向我解释这个差异,为什么变量数会导致错误,而不是dateTime变量?
好吧,它似乎与文字有关.考虑以下代码:
static void Main(string[] args)
{
string str1 = "Foo";
string str2 = str1;
}
Run Code Online (Sandbox Code Playgroud)
尽管从未引用变量"str2",但使用两行进行编译都不会产生警告.如果您注释掉该行string str2 = str1;,则不会使用警告显示变量"str1".
我有一些代码给你,希望有人能告诉我,我错了.目前我正在将我的编程难题移植到其他编程语言中,以便获得一些动手.
C中的代码抽象(更新):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *dummy = "1234567890";
const char* inlet = "_";
void dosomething(int c, char* s){
printf("%s\n", s);
if (c < 10) {
char *ns = malloc(sizeof(char)*11);
strncpy(ns, s, c-1);
strncat(ns, inlet, 1);
strcat(ns, &s[c]);
dosomething(c+1, ns);
//free(ns);
}
}
void main() {
for(int i = 0; i < 100; i++) {
char *s = malloc(sizeof(char)*11);
strcpy(s, dummy);
dosomething(1, s);
free(s);
}
}
Run Code Online (Sandbox Code Playgroud)
代码运行得很好,直到我取消注释dosomething()方法中的free()调用.这就是我不理解的.正如我所看到的,释放内存绝对没有问题,因为在从递归调用返回后不再使用它,但是programm输出告诉了不同的东西.
没有免费的输出符合预期:
...
1_34567890
1_34567890
...
Run Code Online (Sandbox Code Playgroud)
使用第二个空闲时,只有一个结果,而程序停止时:
*** Error in …Run Code Online (Sandbox Code Playgroud) 我尝试将字符串数组添加到字符串数组列表中
我试过list.add但没有工作
List<string[,]> stringList=new List<string[,]>();
stringList.Add({"Vignesh","26"},{"Arul","27"});
Run Code Online (Sandbox Code Playgroud) c# ×8
winforms ×2
.net ×1
abstract ×1
asp.net ×1
attributes ×1
batch-file ×1
c ×1
datagridview ×1
debugging ×1
generics ×1
inheritance ×1
interface ×1
memory ×1
oop ×1
pointers ×1
python ×1
recursion ×1
reflection ×1
spinner ×1
theory ×1
xml ×1
xpath ×1