首先,这是一个关于使用Windows窗体的桌面应用程序的问题,而不是ASP.NET问题.
我需要与其他表单上的控件进行交互.我试图通过使用,例如,以下来访问控件...
otherForm.Controls["nameOfControl"].Visible = false;
Run Code Online (Sandbox Code Playgroud)
它不像我期望的那样工作.我最终抛出了一个例外Main.但是,如果我public而不是制作控件private,我可以直接访问它们,因为......
otherForm.nameOfControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)
但这是最好的方法吗?是否public将其他形式的控件视为"最佳实践"?是否有"更好"的方式访问另一种形式的控件?
进一步说明:
这实际上是我提出的另一个问题的后续问题,在C#中创建"树视图首选项对话框"类型的界面的最佳方法?.我得到的答案非常好,解决了许多很多组织问题,这些问题在保持用户界面简单易用的同时兼顾了运行时和设计时.然而,它确实提出了一个轻松控制界面其他方面的问题.
基本上,我有一个根表单,它实例化了根表单中面板中的许多其他表单.因此,例如,其中一个子表单上的单选按钮可能需要更改主,根表单上的状态条图标的状态.在这种情况下,我需要子表单与父(根)表单的状态条中的控件进行通信.(我希望这是有道理的,而不是在"谁是第一个"的方式.)
我计划将所有配置设置存储在我的应用程序的app.config部分(使用ConfigurationManager.AppSettings该类).当用户使用应用程序的UI更改设置(单击复选框,选择单选按钮等)时,我计划将这些更改写入AppSettings.同时,在程序运行的同时,我计划AppSettings从一个不断处理数据的过程中不断访问.通过UI对设置的更改需要实时影响数据处理,这就是进程将AppSettings不断访问的原因.
这是一个关于性能的好主意吗?AppSettings在编写.Net应用程序时,使用应该是存储和访问配置设置的"正确方法",但我担心此方法不适用于恒定负载(至少在设置不断读取方面).
如果有人有这方面的经验,我将非常感谢输入.
更新:我应该澄清几点.
这不是一个Web应用程序,因此将数据库连接到应用程序可能仅仅是为了存储配置设置而过度杀伤.这是一个Windows窗体应用程序.
根据MSDN文档,ConfigurationManager不仅用于存储应用程序级别设置,还用于存储用户设置.(例如,如果将应用程序安装为部分信任应用程序,则尤为重要.)
更新2:我接受了lomaxx的答案,因为Properties它确实看起来像一个很好的解决方案,而无需向我的应用程序添加任何其他层(例如数据库).使用"属性"时,它已经完成了其他人建议的所有缓存.这意味着任何更改和后续读取都在内存中完成,使其非常快.属性仅在您明确告知磁盘时将更改写入磁盘.这意味着我可以在运行时动态更改配置设置,然后在程序退出时只进行最终保存到磁盘.
只是为了验证它实际上能够处理我需要的负载,我在笔记本电脑上做了一些测试,并且能够使用Properties执行750,000次读取和每秒7,500次写入.这是迄今为止,超出我的是什么应用程序将永远甚至接近需要,我觉得在使用性能,而不会影响性能相当安全的.
我正在编写一个基本上只是一个首选项对话框的应用程序,就像Visual Studio本身使用的树视图首选项对话框一样.应用程序的功能只是从串行设备到文件的数据传递.它在将数据写入文件之前对数据执行许多转换,因此应用程序的GUI只是决定这些转换应该是什么的所有设置.
设计/编码树视图首选项对话框的最佳方法是什么?我一直在做的方法是在左侧建立一个带有停靠树控件的主窗口.然后我一直在创建对应于树的每个节点的容器控件.选择节点后,应用程序会将该节点的相应容器控件带到前面,将其移动到正确的位置,并在主窗口中将其最大化.在设计它时,这似乎非常非常笨重.它基本上意味着我在设计时间之外有超过主窗口边缘的大量容器控件,我必须继续滚动主窗口以便使用它们.我不知道这是否完全有道理我写这个,但也许这个视觉我正在谈论的将更有意义:

基本上我必须使用这个庞大的表单,在整个地方使用容器控件,然后进行一系列运行时重新格式化以使其全部工作.这似乎是很多额外的工作.我是以完全愚蠢的方式做这件事的吗?是否有一些"明显的"更简单的方法来做到这一点,我错过了?
我不知道我是否掌握了很好地表达这个问题所需的所有信息,所以请耐心等待.
我有一个本地网页(本地意思是192.168.*),它受到自签名SSL证书的保护.我正在尝试使用System.Net.HttpWebRequest对象访问此页面,但我遇到了一个奇怪的问题.
如果在Internet Explorer中访问此页面并关闭"使用SSL 2.0"选项,浏览器将返回错误,就好像它无法建立连接一样.(换句话说,浏览器连接错误,而不是服务器发送的错误.)如果打开"使用SSL 2.0"选项,页面工作正常,您会得到标准警告,这是一个自签名证书,你想继续等吗(奇怪的是,Firefox,据说没有打开SSL 2.0,工作得很好.)
现在我的问题是我正在尝试使用HttpWebRequest对象访问此页面,并且它返回的错误是连接意外关闭,就像IE关闭"使用SSL 2.0"时抛出的错误一样.(我已经有代码来忽略它是一个自签名证书的事实,但它甚至没有达到那么远.)
在发出请求时,如何让System.Net.HttpWebRequest获得"使用SSL 2.0"?
我创建了一个具有默认值属性的类.在对象生命周期的某个时刻,我想将对象的属性"重置"回实例化对象时的属性.例如,假设这是类:
public class Truck {
public string Name = "Super Truck";
public int Tires = 4;
public Truck() { }
public void ResetTruck() {
// Do something here to "reset" the object
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在某些时候,后Name和Tires性质已经改变,该ResetTruck()方法可以称为和属性将被分别重置回"超级卡车"和4.
将属性重置为最初的硬编码默认值的最佳方法是什么?