小编Oli*_*ich的帖子

如何让Visual Studio 2008 Windows窗体设计器呈现实现抽象基类的Form?

我在Windows窗体中遇到了继承控件的问题,需要一些建议.

我确实为List中的项目(由面板构成的自制GUI列表)和一些可以添加到列表中的每种数据类型的继承控件使用基类.

它没有问题,但我现在发现,将基本控件变成抽象类是正确的,因为它有方法,需要在所有继承的控件中实现,从内部的代码调用base-control,但不能也不能在基类中实现.

当我将基本控件标记为抽象时,Visual Studio 2008 Designer拒绝加载窗口.

有没有办法让Designer使用基础控件制作抽象?

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

98
推荐指数
5
解决办法
3万
查看次数

DataGridView获取当前选定的对象

我需要从da数据绑定DataGridView获取当前选定的对象.

我不需要当前所选单元格的对象,而是整个行所基于的对象,在这种情况下,BusinessObject属性将构成网格的列.

我可以查看DataSource,但它本身只是一个对象,可以是BindingSource或IBindingList或类似的东西 - 所以不容易标准化的方式来获取想要的对象.

在此之后需要检查businessObject以获取名为IsChanged的属性,并在绑定源选择下一个项目之前要求用户保存或放弃更改.因此,我必须找出DataGridView的RowValidating-Event中的当前对象,因为BindingSource不提供在更改发生之前停止更改的事件.请参阅此处了解众所周知的问题

谢谢阅读 ;-)

c# datagridview winforms

40
推荐指数
2
解决办法
5万
查看次数

如何编写微调器以在批处理文件中等待进程?

我想向用户展示一个微调器,在后台完成某些操作,但不知道它在批处理文件中是如何工作的.

有人有线索吗?

batch-file spinner

14
推荐指数
2
解决办法
3万
查看次数

DebuggerDisplay在运行时解析为字符串

有没有办法访问DebuggerDisplayAttribute运行时显示的字符串?

对于我们的业务对象,我尝试获取有关异常处理的自动调试器信息.捕获异常时使用的实际对象应序列化为文本以增强异常消息.由于某些属性具有其他业务对象作为类型,因此如果递归使用,这可能会变得非常长.因此,我想序列化只是已经在DebuggerDisplay类的属性中定义的信息.ToString()类的实现可能不同,不能用于此任务.

那么是否可以在运行时获取调试器中显示的字符串?

c# debugging error-handling attributes

14
推荐指数
2
解决办法
1676
查看次数

接口还是抽象类?

对于我的新宠物项目,我有一个设计问题,已经确定了,但我也想要其他一些意见.

我有两个类(简化):

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应同等地使用.为此,我可以采取两种方式:

  • 创建一个界面: IObject
  • 创建一个抽象类: ObjectBase

我决定采用界面的方式,我后来在代码中不能ObjectBase每次都写,而IObject只是为了方便 - 但这种方式的其他积极因素是什么?

第二,如何增加IXmlSerializable整个故事呢?让接口继承IXmlSerializable或者它是否有更多的正面要IXmlSerializable在抽象基类中实现?

c# theory interface abstract

13
推荐指数
4
解决办法
7715
查看次数

继承和静态属性

我不明白以下现象,有人可以解释一下我的错误吗?

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实际上是拥有自己的静态变量的类型.但似乎该类的静态部分不是继承而是引用 - 我怎么会出错?

.net c# oop inheritance

8
推荐指数
2
解决办法
7915
查看次数

xpath获取特定的previous-sibling的最后一个

这是非常简单的事情(至少我猜),我只是没有得到线索.

我必须解析一个大型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)

xml xpath

8
推荐指数
1
解决办法
2万
查看次数

列表的python列表的内存消耗

我最近正在处理的一个代码被发现使用了大约200MB的内存来运行,我很困惑为什么它需要那么多。

基本上,它将一个文本文件映射到一个列表中,其中文件中的每个字符都是它自己的包含该字符的列表,以及到目前为止(从零开始)作为它的两个项目出现的频率。

所以'abbac...'[['a','0'],['b','0'],['b','1'],['a','1'],['c','0'],...]

对于 100 万个字符长的文本文件,它使用了 200MB。

这是合理的还是我的代码正在做的其他事情?如果合理,是因为列表数量多吗?会[a,0,b,0,b,1,a,1,c,0...]占用更少的空间吗?

python memory

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

可能的未指定类型的通用方法?

我确实需要一个加载对象列表的解决方案 - 查找其中只有一个属性从当前对象引用,如本例所示.

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中读取参数的位置.

c# generics reflection

4
推荐指数
1
解决办法
1307
查看次数

VisualStudio2008奇怪的编译警告,需要解释

只是对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# visual-studio-2008

4
推荐指数
1
解决办法
166
查看次数

malloc和递归函数中的自由

我有一些代码给你,希望有人能告诉我,我错了.目前我正在将我的编程难题移植到其他编程语言中,以便获得一些动手.

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)

c recursion pointers

3
推荐指数
2
解决办法
2214
查看次数

将项添加到c#中的字符串数组列表

我尝试将字符串数组添加到字符串数组列表中

我试过list.add但没有工作

List<string[,]> stringList=new List<string[,]>();
stringList.Add({"Vignesh","26"},{"Arul","27"});
Run Code Online (Sandbox Code Playgroud)

c# asp.net

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