天道酬勤,学无止境

VB6 控件数组最简单的 .NET 等效项是什么?(What's the simplest .NET equivalent of a VB6 control array?)

问题

也许我只是对 .NET 还不够了解,但我还没有看到一种令人满意的方法来在 .NET 中轻松实现这个简单的 VB6 代码(假设这个代码在一个表单上,在数组 Command1() 和 N数组 Text1()) 中的文本框:

Private Sub Command1_Click(Index As Integer)

   Text1(Index).Text = Timer

End Sub

我知道这不是很有用的代码,但它展示了在 VB6 中可以轻松使用控件数组。 C# 或 VB.NET 中最简单的等价物是什么?

回答1

制作一个通用的文本框列表:

var textBoxes = new List<TextBox>();

// Create 10 textboxes in the collection
for (int i = 0; i < 10; i++)
{
    var textBox = new TextBox();
    textBox.Text = "Textbox " + i;
    textBoxes.Add(textBox);
}

// Loop through and set new values on textboxes in collection
for (int i = 0; i < textBoxes.Count; i++)
{
    textBoxes[i].Text = "New value " + i;
    // or like this
    var textBox = textBoxes[i];
    textBox.Text = "New val " + i;
}
回答2

VB .NET 所做的另一件好事是拥有一个处理多个控件的事件处理程序:

Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
        Handles TextBox1.TextChanged, _

        TextBox2.TextChanged, _

        TextBox3.TextChanged

End Sub
回答3

.Net 中没有真正的1 对 1 模拟。 当然,您可以创建特定类型的控件的数组或列表,但是没有任何东西可以自动为您做这些。

但是,我从未见过无法在 .Net 中重构为更好的控件数组。 一个恰当的例子就是你的例子。 在您发布的场景中,您使用控件数组将按钮与文本框配对。 在 .Net 中,您可能会使用自定义控件来执行此操作。 自定义控件将由一个按钮、一个文本框和一个共享/静态计时器组成。 该表单使用此自定义控件的多个实例。 您实现控件所需的逻辑一次,并且它与自己的源文件隔离,可以在源控件中跟踪和编辑,无需与更大的表单类合并,或者轻松地在多个表单甚至多个项目中重用. 您也不必担心确保命令按钮索引与文本框索引匹配。

为此使用自定义控件而不是控件数组与使用类而不是数组对数据进行分组大致类似,因为您获得的是名称而不是索引。

回答4

有两个方面。

.NET 很容易支持控件数组,VB6 只需要使用一种解决方法,因为否则,连接事件真的很困难。 在 .NET 中,动态连接事件很容易。

但是,.NET 表单设计器不支持控件数组的原因很简单:控件数组是在运行时创建/扩展的。 如果您知道在编译时需要多少个控件(推理如此),那么您可以为它们指定不同的名称,并且不要将它们放入数组中。

我知道这不是很有用的代码

这正是重点。 如果一个功能没用,为什么要拥有它?

如果需要,您还可以按名称访问控件,结果如下:

Private Sub Command_Click(sender As Object, e As EventArgs) Handles Command1.Click, Command2.Click …
    Dim name As String = DirectCast(sender, Control).Name
    Dim index As Integer = Integer.Parse(name.Substring("Command".Length))
    Controls(String.Format("Text {0}", index)).Text = Timer.Value.ToString()
End Sub
回答5

VisualBasic .NET 的兼容性库包含强类型控件数组。 这是升级向导用来替换当前 VB6 控件数组的内容。

然而,VB6 中的控件数组只是一个对象的集合,VB6 在表面上做了一些语法魔术。 在 .NET 世界中,通过删除它,他们正在推动更好的实践。

最后,随着泛型的出现,没有什么能阻止你使用

List<YourControl> MyControlArray.
回答6

制作一组控件。

TextBox[] textboxes = new TextBox[] {
    textBox1,
    textBox2,
    textBox3
};
回答7

相同的点击事件可以处理来自 .Net 中多个按钮的按钮按下。 然后您可以添加要在 Tag 属性中查找的文本框吗?

Private Sub AllButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
  Dim c As Control = CType(sender, Control)
  Dim t As TextBox = FindControl(CType(c.Tag, String))
  If t Is Not Nothing Then
     t.Text = "Clicked"
  End If
End Sub
回答8

VB6 中控件数组的两个主要优点是:(1) 它们为您提供了一种遍历控件集合的方法 (2) 它们允许您在控件之间共享事件

(1) 可以在 .Net 中使用一组控件来完成 (2) 可以通过让一个事件处理多个控件来完成(语法有点不同,因为您使用的是sender参数而不是myArray(index) )。

.Net 的一个好处是这些功能是解耦的。 因此,例如,您可以拥有共享事件的控件,即使它们不是数组的一部分并且具有不同的名称甚至不同的类型。 您可以遍历一组控件,即使它们具有完全不同的事件。

回答9

我知道我的回答已经很晚了,但我想我找到了解决方案。 我并不是唯一一个为 VS 的这种限制而苦苦挣扎的前 VB6 开发人员。 很久以前,我尝试迁移我设计的 CRM,但我失败了,因为我对控制阵列(一种形式的数百个)有很强的依赖性。 我阅读了很多论坛,我能够编写这个简单的代码:

VB.NET:

'To declare the List of controls
Private textBoxes As List(Of TextBox) = New List(Of TextBox)()

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
    'To get all controls in the form
    For Each control In Controls

        'To search for the specific type that you want to create the array 
        If control.[GetType]() = GetType(TextBox) Then
            textBoxes.Add(CType(control, TextBox))
        End If
    Next

    'To sort the labels by the ID
    textBoxes = textBoxes.OrderBy(Function(x) x.Name).ToList()
End Sub

C#:

//To declare the List of controls
private List<TextBox> textBoxes = new List<TextBox>();
private void Form1_Load(object sender, EventArgs e)
{
    //To get all controls in the form
    foreach (var control in Controls)
    {
        //To search for the specific type that you want to create the array 
        if (control.GetType() == typeof(TextBox))
        {
            //To add the control to the List
            textBoxes.Add((TextBox)control);
        }
    }

    //To sort the labels by the ID
    textBoxes = textBoxes.OrderBy(x => x.Name).ToList();
}

有3点需要考虑:

  1. List将帮助您模拟大量控件。
  2. typeof(Control)将帮助您定义要添加到列表中的控件的类型。
  3. 当您将“索引”保留为最后一个字符(textBox 1 , textBox 2 , ..., textBox N ) 时,您可以创建一个逻辑顺序。

设计模式中的示例:

跑步:

在我看来,类似的逻辑可能会用于其他技术,如 WPF、ASP.NET(Web 窗体)或 Xamarin(窗体)。 我希望这段代码将来能帮助到更多的程序员。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何将丑陋且未记录的VB6代码迁移到.NET(How to migrate ugly and undocumented VB6 Code to .NET)
    问题 我知道已经有关于VB6迁移的问题,但是我的项目的代码库在这里带来了一些新问题。 我不得不说Code的质量,结构和体系结构只是一场噩梦。 有2个大项目:具有40个表单,40个模块和几个类文件的Nr.1,此EXE有点像“基本系统”。 Nr.2具有80个表单,20个模块和几个类文件,此EXE调用功能构成“基本系统”。 然后还有〜10个其他带有GUI的项目(每个都有1-3个表单)和另外90个非GUI项目,其中大多数是EXE文件,一些是DLL。 DLL是用C,C ++和VB6编写的。 自10年以来,该《守则》一直在发展,并一次由1位(不良)开发人员编写。 具有500行(或更多行)的功能非常常见。 90%的GUI组件被命名为text1,command2(1),... 复制和粘贴到处都是,例如,复制了具有5000行代码的EXE项目(无GUI),并且副本中的唯一更改是每个邮件发送文件而不是FTP(同一项目还有2个其他副本) )。 我曾经有一个小表格(15个字段),应该解决一个小问题(通常最多半小时),每次我更改某些内容时,它要么无效,要么在表格中产生新的错误。 2天后,我决定完全重写该表单,从旧表单中的〜20条SQL语句中,只有2条在新表单中幸存。 甚至不问代码中的注释... 几个月前,我接手了该项目,并且是唯一的维护者。 变更请求和错误的流量持续不断(但很少),我们从客户那里获得了维护预算
  • VB.net中CreateObject的等价代码(Equivalent code of CreateObject in VB.net)
    问题 我正在尝试绑定/使用 vb.net 中的对象,如 excel.application 等。我主要是一名 vb6 编码员,现在正在转移和学习 vb.net。 在 vb6 中,我可以通过使用 createobject 函数轻松处理 这是vb6代码: Dim objXLS As Object Dim objWorkBook As Object Set objXLS = CreateObject("Excel.Application") objXLS.Visible = False Set objWorkBook = objXLS.Workbooks.Open("Excel File Goes Here") objWorkBook.SaveAs strCurPath & "\Temp.csv", 6 objWorkBook.Close 2 objXLS.Quit Set objWorkBook = Nothing Set objXLS = Nothing 我查看了互联网并找到了以下针对 c# 的解决方案,但不适用于 .net。 我未能在 vb.net 中使用动态类型/命令。 链接在这里: C#中CreateObject的等效代码 也有乱七八糟的方法..但我喜欢用简单的方法(标签绑定左右) 那么,有没有办法在 vb.net 中使用动态密钥,或者 vb.net 中的等效项是什么? 回答1
  • Vb6的“标记”属性是否等效于ASP.Net?(Vb6 “Tag” property equivalent in ASP.Net?)
    问题 我在这里寻找想法和意见,而不是“真正的答案”,我想... 在早期的VB6时代,所有控件中都有一个称为“ Tag”的属性,这是一种存储与控件相关的自定义信息的有用方法。 每个控件都有它,而且都很幸福。 现在,在.Net(至少对于WebForms)中,它不再存在... 有人能替代吗? 我经常发现这个问题,因为我有不同的功能在生命周期的不同时间运行,并且它们对我的控件起作用,并且我希望将它们保持原样,但一个应将有关的信息传递给另一个具体控制。 我可以想到一百万种替代方案(显然是从模块级字典开始的),但是没有一种替代方案能像好的ol'Tag一样干净。 (注意:我知道我可以继承所有控件并使用我的版本。我宁愿不这样做) 有什么建议么? 您通常如何解决? 关于他们为什么要删除此内容的任何想法? 编辑:我正在寻找一些内部请求,而不是内部请求。 我不需要此信息仍可以保留在PostBack上。 例如,这在_Load和_PreRender方法之间。 EDIT2:我确实知道我的ASp.Net,而且我知道桌面和网络之间的区别,伙计们! 我只是想使用.Net给我的最大化的抽象。 我了解这些折衷方案,相信我,并在回答我的情况下进行回答。 回答1 不,没有直接等效的功能,但是如果您使用的是Framework v3.5,则可以使用扩展方法轻松添加此功能。 例如: Imports System.Runtime
  • VB6 解析器/词法分析器/脚本器(VB6 Parser/Lexer/Scripter)
    问题 我在 VB6 中有一个游戏,它运行得很好,但我一直在玩弄创建脚本引擎的想法。 我想我希望 VB6 为我读取纯文本脚本文件,然后 lex/parse/execute 它们。 我有很好的编程经验,并且我之前构建了一个简单的C编译器,以及一个LOGO仿真器。 我的问题是:有什么我可以使用的工具,比如 Lexx/Yakk/Bison 来帮助我? 我应该如何解决有关词法分析、解析和将命令反馈给 VB6 的问题,以便我可以处理它们? 这个想法是否是一个坏主意,因为有太多障碍(例如,在组装中建造扫雷艇,虽然不是不可能,但非常困难,而且是个坏主意。)? 回答1 如果您愿意使用 VBScript 而不是 VB6,您可以只使用MSScriptControl来运行命令而不是创建自己的命令。 这是一篇讨论从 .Net 应用程序使用它的文章,尽管它是一个 ActiveX 控件,因此应该为您提供相当多的灵活性。 该控件可以从这里下载。 回答2 使用 Microsoft® Windows® Script Control,因为它很容易集成到现有的 VB6 应用程序中。 该控件支持 VBScript、JScript 或任何其他“活动脚本”实现。 我在四个项目中使用了Windows Script Control ,它运行得非常好。 非常容易集成。 我希望 Microsoft 能给我们一个 .NET 的替代品
  • 制作索引控制数组?(Making an indexed control array?)
    问题 C#是否已索引控制数组? 我想举一个带有5个按钮的“按钮数组”,这些按钮仅使用一个事件处理程序来处理所有这5个控件的索引(就像VB6一样)。 否则,我必须为这5个按钮中的每个按钮编写一个额外的事件处理程序。 如果我有100个按钮,则需要100个事件处理程序? 我的意思是这样的: TextBox1[i].Text="Example"; 对于我来说,使用控制数组可以使编码工作变得更加容易。 现在我知道,C#至少在用户控件上没有可见的数组功能,并且在用户控件上没有“ index”属性。 所以我想C#没有控制数组,或者我必须以已知名称调用每个元素。 我不必编写for循环中的100个TextBoxes 100个递增值,而是要编写: TextBox1.Text = Value1; TextBox2.Text = Value2; ... ... TextBox100.Text = Value100; 还有更多的工作和所有这100个事件处理程序,每个处理程序额外需要一个额外的TextBox。 回答1 正如我在对HatSoft解决方案的评论中提到的那样,C#Winforms不允许您创建控件数组,就像旧的VB6允许我们使用的那样。 我认为我们可以找到的最接近的是HatSoft和Bert Evans在其帖子中显示的内容。 我希望可以满足您要求的一件事是事件处理程序,您将获得一个公共事件处理程序
  • Visual Basic 2010 创建控件数组(Visual Basic 2010 Creating a Control Array)
    问题 如何制作控件数组? 或等价物。 我习惯了 Visual Basic 6,它提供了在我复制粘贴和控制时是否创建控件数组的选项。 回答1 控制阵列早已不复存在。 面向对象的方法现在是 VB 的法则。 您需要使用某种类型的集合,例如列表。 回答2 控件数组的另一个隐含特性很容易被忽视,即数字索引与数组的每个元素的关联。 索引可以是任何正整数,只要它们在集合中是唯一的; 它们不必是连续的。 因此,数组更像是一个由整数索引的字典,每个项目值都是特定类型控件的实例。 控件数组的 VB6 事件处理程序中的逻辑获取索引值以及要处理的事件的属性。 处理程序中的逻辑通常使用索引来确定引发事件的控件实例。 .NET 事件处理程序完全不同。 您通常会获得对特定控件实例的引用,以及具有要处理的事件属性的特定事件对象的实例。 你不会得到索引。 此外,VB6 应用程序有时具有将控件数组作为数组迭代/操作的逻辑。 在我们的默认翻译中,我们尝试支持显式依赖于控件数组及其索引的传统 VB6 逻辑。 我们将控件数组重写为一组单独的控件实例,然后在表单初始化期间将它们添加到通用 OrderDictionary<int, controlType> 中。 各个控件订阅事件,我们可以使用集合来查找给定控件实例的索引或迭代/操作“数组”中的项目。 如果您不明确需要索引或数组,则可以去掉集合。 现在动态添加控件的工作量更大—
  • VBA和MS-Access中的Bang表示法和点表示法(Bang Notation and Dot Notation in VBA and MS-Access)
    问题 在仔细阅读我正在记录的应用程序时,我在访问对象属性/方法等过程中遇到了一些爆炸符号示例,在其他地方,它们使用点符号来实现相同的目的。 使用一种或另一种有区别或偏爱吗? 一些简单的谷歌搜索只能显示有关该主题的有限信息,而有些人实际上是在相反的情况下使用它的。 也许在某个地方有来自MS的编码标准部分指出了疯狂的方法? 回答1 尽管已(以前)接受了该问题的答案,但该爆炸实际上并不是成员或集合访问运算符。 它做了一件简单而又具体的事情: bang运算符通过将bang运算符后面的文字名称作为字符串参数传递给该默认成员,从而提供对对象默认成员的后期绑定访问。 而已。 该对象不必是集合。 它不必具有称为Item的方法或属性。 它所需要的只是一个Property Get或Function ,它可以接受字符串作为第一个参数。 有关更多详细信息和证明,请参阅我的博客文章讨论:爆炸! VBA中的(感叹号运算符) 回答2 爆炸运算符( ! )是访问Collection或其他可枚举对象的成员的快捷方式,例如ADODB.Recordset的Fields属性。 例如,您可以创建一个Collection并向其中添加一些关键项: Dim coll As Collection Set coll = New Collection coll.Add "First Item", "Item1" coll.Add
  • C#中的Java BigDecimal类的等效项是什么?(What is the equivalent of the Java BigDecimal class in C#?)
    问题 BigDecimal是java.math包中的类,对于处理一定规模的大量对象有很多好处。 具有此功能的c#中是否存在等效的类或数据类型。 回答1 C#仅使用BigInteger构建了它(在.NET Framework 4中)。 decimal精度足以完成您的任务吗? 它是一个128位数字,可以容纳范围在±1.0×10 −28到±7.9×10 28之间的值。 回答2 就在最近,我还需要在C#中使用任意精度的小数,并遇到了这里发布的想法:https://stackoverflow.com/a/4524254/804614 然后,我完成了草案,以支持所有基本的算术和比较运算符,并支持当时需要的所有典型数值类型和一些指数方法之间的转换。 它当然并不全面,但是功能非常强大,几乎可以立即使用。 由于这是一整夜编码的结果,所以我不能保证此东西没有错误或完全准确,但是对我来说效果很好。 无论如何,我想在这里发布它,因为我没有找到其他任何方法来使用C#中的任意精度小数,而无需包括大量的库(大多数甚至不是.net,而是c ++的包装器),这些库带有各种不必要的东西东西。 基本思想是使用.NET 4.0的BigInteger类型和以10为底的指数(Int32)构建具有任意大尾数的自定义浮点类型。 如果您发现错误/不正确,有建议或任何有建设性的内容,请随时直接编辑我的帖子或发表评论,以便我改善答案。
  • 如何在C#中将消息框显示为系统模式?(How to display a message box in C# as system modal?)
    问题 如何在C#中将消息框显示为系统模式,类似于Visual Basic 6中的vbModal ? 回答1 使用C#MessageBoxIndirect包装器的高级MessageBoxing 回答2 您是在谈论消息框还是标准表格? 如果您在谈论标准格式,则vbModal最简单的.NET等效项是System.Windows.Forms.Form的ShowDialog方法。 所以,而不是旧的 myForm.Show vbModal 你用 myForm.ShowDialog(); 或者 myForm.ShowDialog(myFormOwner); 就像以前的旧vbModal一样,这会在ShowDialog行中停止执行。 回答3 我认为您必须自己动手。 快速搜索打开了以下两个链接: 代码项目 蛋头咖啡馆 回答4 您还应该问自己,您是否真的要创建系统模式消息框,它被认为是不良的UI设计,这就是为什么不在.NET中可用的原因。 回答5 C#中的标准消息框是模态的(在关闭消息框之前无法访问应用程序的其余部分)。 http://msdn.microsoft.com/zh-CN/library/aa335423(VS.71).aspx “消息框是一个模式对话框,这意味着除了模式窗体上的对象外,其他任何输入(键盘或鼠标单击)都不会发生。” 编辑:我不确定Vb6和那里的消息框。 是否使用其他类型的
  • LINQ的Java等效项是什么? [关闭](What is the Java equivalent for LINQ? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 5年前关闭。 改善这个问题 LINQ的Java等效项是什么? 回答1 没有像LINQ for Java这样的软件。 ... 编辑 现在通过Java 8向我们介绍了Stream API,这在处理集合时是类似的事情,但与Linq不太一样。 如果它是您正在寻找的ORM,例如Entity Framework,那么您可以尝试Hibernate :-) 回答2 还有一个替代解决方案,Coollection。 Coolection并没有伪装成新的lambda,但是我们被旧的旧Java项目所包围,这个lib将为您提供帮助。 它的使用和扩展非常简单,仅涵盖了集合中最常用的迭代操作,如下所示: from(people).where("name", eq("Arthur")).first(); from(people).where("age", lessThan(20)).all(); from(people).where("name", not(contains("Francine"))).all(); 回答3 Lambdas现在以JSR-335的形式在Java 8中可用-JavaTM编程语言的Lambda表达式 更新:JDK8现在已经发布
  • VB6关键字Set是什么意思?(VB6 keyword Set what does it mean?)
    问题 我正在浏览旧的VB6代码,并且看到了类似的内容 Set AST = CreateObject("ADODB.Stream") 我有使用VB6和VB.NET的经验,但是我从未在我的VB6项目中使用过此关键字Set 。 我在互联网上研究了Set的用途,而我只知道Properties中的用途,这在VB.NET中只有我知道 Public Property myProperty As String Get Return _myProperty End Get Set(value as String) _myProperty = value End Set End Property 而且我认为Set在上面的代码中使用的方式有所不同。 两种方法有什么区别? 我想知道Set在VB6中做什么 回答1 Set正在为AST变量分配新的引用,而不是为( AST当前引用的对象)的默认属性分配值。 Web上没有太多的VB 6文档,但是1 VB.Net的一些帮助仍然引用了较旧的方法。 请参见Visual Basic 6用户的默认属性已更改: 在Visual Basic 6.0中,对象支持默认属性。 例如,在Label控件上,Caption是默认属性,下面的示例中的两个分配是等效的。 Dim lbl As Label lbl = "Important" lbl.Caption = "Important"
  • 您最喜欢的Visual Basic 6.0工具和技巧(Your favorite Visual Basic 6.0 tools and tips [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 这与类似的帖子有些相关,但是该帖子通常是Visual Studio 6,许多建议不适用于Visual Basic 6.0。 对工具/提示进行建议或投票。 请为每个帖子提供一个工具/提示,以便每个人都可以对其单独投票。 简要说明这些工具的功能。 回答1 在VB6中启用鼠标滚轮: Microsoft:启用鼠标滚轮 回答2 MZ工具。自由。 IDE的许多其他工具,例如“收藏夹过程”和“向程序添加错误例程”等等。 http://www.mztools.com/v3/mztools3.aspx 回答3 安装VB6之后,我总是在Tools-Options上进行这些自定义。 在“编辑器”选项卡上关闭“自动语法检查”。 键入语法错误时,您不需要消息框-您只希望问题行显示为红色,以便稍后进行修复。 在“编辑器”选项卡上打开“要求变量声明” 。 不要想,就去做。 在“常规”选项卡上关闭“按需编译” 。 您希望在运行代码时立即被告知语法错误
  • jQuery的.not()的香草javascript等效项是什么?(Which is the vanilla javascript equivalent for .not() of jQuery?)
    问题 我正在尝试创建一个将类添加到列表的循环。 我希望将此类添加到除单击元素之外的所有其他元素上。 我在互联网上找到了以下内容: $('.elements').click(function(){ $('.elements').not(this).each(function(){ // do something }); }) 有相当于香草JavaScript的内容吗? 我找不到来自.not()的转换。 回答1 您发布的完整代码的原始版本将是这样的。 相当详细的TBH,而无需帮助程序向每个el添加单击侦听器。 var els = document.querySelectorAll('.elements'); [].forEach.call(els, function(el, i, els) { el.addEventListener('click', function() { [].forEach.call(els, function(el) { if(el !== this) { // do something } }, this); }); }); 回答2 最接近的等效项可能是Array.prototype.filter,它允许您使用函数测试数组的每个元素: var elementToExclude = something; arrayOfElements.filter
  • C#GUI命名约定的最佳做法? [关闭](Best practices for C# GUI naming conventions? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 改善这个问题 无论用WinForms还是XAML编写的GUI,在我看到的项目之间似乎都有最广泛的命名约定。 对于一个用于人名的简单TextBox ,我已经看到了各种命名约定: TextBox tbName // Hungarian notation TextBox txtName // Alternative Hungarian TextBox NameTextBox // Not even camelCase TextBox nameTextBox // Field after field with TextBox on the end TextBox TextBoxName // Suggested in an answer... TextBox textBoxName // Suggested in an answer... TextBox uxName // Suggested in an answer... TextBox name // Deceptive since you need name.Text to get the real value TextBox textBox1 // Default name
  • 如何确定导致Windows Installer重复进行自我修复的原因?(How can I determine what causes repeated Windows Installer self-repair?)
    问题 如何仅记录导致Installshield 2008进行的MSI文件通过“自我修复”重新安装的更改? 自我修复的原因是什么? 如何使用Installshield 2008禁用MSI的自我修复? 回答1 自修复,简单简短解释:如果删除文件,为什么MSI安装程序会重新配置? 提供替代答案 更新:有一个更简短,更“以解决方案为中心”的答案可用,也许先尝试一下。 该答案的重点是“了解自我修复”,而不是说明消除该问题所应采取的步骤。 您可能还需要阅读此答案的第一部分。 意外的Windows Installer自修复问题-快速修复? 该“文章”已变得很大,有些难以理解。 这是新写的序言-简短的“解决方法版本”,用于修复意外的自我修复(通常在VB6,Visual Studio,MS Office,MS Outlook,AutoCAD等中找到) 如果遇到意外的自我修复,可以尝试做的第一件事是手动创建一个桌面快捷方式,该桌面快捷方式直接出现问题时正在启动的应用程序可执行文件。 这绕过了最常见的自我修复触发措施“广告的快捷方式”。 如果这行得通,则您的问题已“解决”(或避免了)。 这是一个充实的快速解释如果问题仍然存在,或者您的问题与MS Office , MS Outlook加载项或类似内容(无法通过快捷方式启动)有关,则您的系统很可能会遇到COM注册冲突,并且涉及到更多修复程序。
  • NaN或IsNumeric的C#等效项是什么?(What is the C# equivalent of NaN or IsNumeric?)
    问题 测试输入字符串是否包含数字值(或相反不是数字)的最有效方法是什么? 我想我可以使用Double.Parse或正则表达式(见下文),但我想知道是否有一些内置的方法可以做到这一点,例如javascript的NaN()或IsNumeric() (是VB,我不记得了?)。 public static bool IsNumeric(this string value) { return Regex.IsMatch(value, "^\\d+$"); } 回答1 这没有正则表达式的开销 double myNum = 0; String testVar = "Not A Number"; if (Double.TryParse(testVar, out myNum)) { // it is a number } else { // it is not a number } 顺便说一句,除了GUID的明显例外,所有标准数据类型都支持TryParse。 更新 secretwep提示值“ 2345”将作为数字通过上述测试。 但是,如果需要确保字符串中的所有字符都是数字,则应采用另一种方法。 范例1 : public Boolean IsNumber(String s) { Boolean value = true; foreach(Char c in s.ToCharArray()) {
  • 有从VB6到C#的迁移工具吗? [关闭](Is there any VB6 to C# migration tool? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 有谁知道从VB6代码转换为C#的方法吗? 有什么工具可以帮我吗? 我可以遵循任何迁移过程来做到这一点吗? 回答1 VisualStudio提供了(或至少提供了)一个向导来完成从VB6到VB.NET的转换(然后可以通过一些工作将其转换为C#,可能需要#develop的VB.NET <-> C#转换器的帮助),但是我上一次使用它时,对于任何不平凡的事情,都需要做很多手工工作,因此,如果这是一个大型和/或重要的应用程序,我怀疑您最好手动重写或移植。 回答2 它可能有点面颊,但您的大脑可能是最好的使用工具。 可能值得重写。 也许您不需要移植它。 VB6可以变成COM组件吗? 移植到COM,从C#呼叫,及时返回Judy法官。 回答3 作为做了很多次的人,这不是一个容易的过程。 您可以使用此答案中所述的VB6到VB.Net工具,然后使用Reflector或SharpDevelop转换为C#。 通过SharpDevelop转换,需要注意一些事项。 它搞砸了所有数组引用,并认为它们是函数调用,并且所有逻辑运算符都转换为按位逻辑运算符(并且变为&而不是&&)。
  • Microsoft.VisualBasic命名空间是否为“ true .NET”代码?(Is the Microsoft.VisualBasic namespace “true .NET” code?)
    问题 我的开发团队正准备开始一个新项目。 自VB3以来,该商店一直是“ VB商店”,但现在的主流观点是我们是“ .NET商店”,并且由于C#是专门为.NET创建的,而VB.NET是翻新的,因此我们已经决定只编写C#。 争议围绕Microsoft.VisualBasic命名空间在新开发中是否应有合法地位,还是仅用于向后兼容VB6(及较旧)代码的问题。 另一个更有趣的问题是,Microsoft.VisualBasic命名空间“下”的代码是否甚至是.NET代码,也是否真的是将旧的VB运行时仔细封装在.NET包装器中,从而使其实际上是COM互操作控件(与WinForms包装非.NET Win32窗口API的方式类似,但仅公开.NET API以供使用)。 更令人困惑的是,我们的开发团队有一位Microsoft咨询服务顾问,告诉我们Microsoft不再支持Visual Basic,包括Microsoft.VisualBasic命名空间下的VB运行时。 我正在寻找的是链接(最好是无处不在的Microsoft资料)与文档的链接,这些文档肯定会以一种或另一种方式回答这个问题。 我已经在Google上尝试了几种搜索排列方式,但并没有进一步深入到这个问题的深处。 编辑:显然我没有说清楚我的问题。 我不是问VB.NET是否是真正的.NET代码。 我试图确定Microsoft
  • VB6是否有任何好的TDD工具或资源?(Are there any good TDD tools or resources for VB6?)
    问题 是的,我知道我落后于时代,但是我得到的是一个古老的VB6编辑器应用程序,我相信没有人会很快升级到.NET。 它使用了几个第三方DLLs工具,并且仍在使用旧的RichEdit控件,因此,仅使用此工具,我基本上就可以提高自己的Bug场。 足够多了,我正在尝试查看是否可以使用TDD,以便可以开始为我需要修复的每个行为/功能编写单元测试,因此迟早我可以为此工具提供完整的回归测试套件。 而且我猜想,即使将来将来我们确实升级到.NET时,我认为我编写的大多数测试也应该有助于验证正确的行为,并且也应该可以升级到.NET版本。 一些基本的谷歌搜索使我进入这个工具,称为单纯的VBunit,但是我找不到足够的指南等让我入门,是的,我对VB6也不太熟练:( 那么,有谁知道有什么好的工具/资源可供我在此VB6应用程序中使用TDD? [为防万一,最好稍后再升级到.NET。] 或者我可以通过解决方法实际上将那些用于.NET的单元测试框架(即NUnit等)使用? 还是有一种更出色的方法来完成此任务? 谢谢 :) 编辑: 我曾尝试将vbunit弄乱,但发现没有简单的方法将其添加到现有应用程序中,或者至少不知道如何将其添加到现有应用程序中。 因此,我发现它也可以和vb-lite-unit以及这个comunit一起玩。 再有就是说我们可以将NUnit与vb6一起使用,但是资源更少。 回答1
  • Java的PHP var_dump等效项是什么?(What is the Java equivalent of PHP var_dump?)
    问题 PHP具有var_dump()函数,该函数输出对象的内部内容,显示对象的类型和内容。 例如: class Person { private $firstName; private $lastName; public function __construct($firstName, $lastName) { $this->firstName = $firstName; $this->lastName = $lastName; } } $person = new Person('Jon', 'Smith'); var_dump($person); 将输出: object(Person)#1 (2) { ["firstName:private"]=> string(3) "Jon" ["lastName:private"]=> string(5) "Smith" } Java中将执行相同操作的等效项是什么? 回答1 它不是Java中的嵌入式程序,因此您不会免费获得它。 它是通过约定而不是语言构造来完成的。 在所有数据传输类中(甚至可能在您编写的所有类中…… ),您都应该实现一个明智的toString方法。 因此,这里您需要在Person类中重写toString()并返回所需的状态。 有一些实用程序可帮助编写良好的toString方法,或者大多数IDE具有自动的toString(