任何人都可以告诉我如何关闭Visual Studio中的自动轮廓?概述是将代码折叠到程序员定义的区域中的功能.
在我看来,极少数情况下概述是有用的.是的,它使大文件更容易导航,但大多数它掩盖了复杂性.我倾向于在打开源文件时默认关闭此功能.
对于大多数文件类型(例如.cs,.xml,.xslt),VS2010中的"属性"窗口允许用户指定用于转换文件的自定义工具.作为参考,这是选择"自定义工具"字段时获得的工具提示.
指定在设计时转换文件的工具,并将该转换的输出放入另一个文件中.例如,数据集(.xsd)文件附带默认自定义工具.
我正在寻找有关如何设置和使用此属性的信息.
这是我想解决的问题.我正在通过应用XSLT转换和XML文件.描述我在转换过程中使用扩展对象这里.
在这样做的过程中,我使Visual Studio无法用作编辑和调试我的XSLT的工具.我希望我能编写一个简单的转换引擎,它允许我们使用Visual Studio,就像我们对不使用扩展对象的XSLT文档一样.我认为(希望)自定义工具属性是实现此功能的关键.
TIA
看起来DataGridView控件只能绑定到平面的数据源(所有属性都是主要类型).我的数据是分层的.例如:
interface INestedObj
{
string Prop3 { get; }
}
interface IParentObj
{
public string Prop1 { get; }
public string Prop2 { get; }
public INestedObj NestedObj { get; }
}
Run Code Online (Sandbox Code Playgroud)
鉴于此,如何绑定到实现IParentObj的对象?最终你面临着必须做这样的事情:
grid.Columns["prop1Col"].DataPropertyName = "Prop1";
grid.Columns["prop2Col"].DataPropertyName = "Prop2";
grid.Columns["prop3Col"].DataPropertyName = "How to display Prop3?";
grid.Columns["prop3Col"].DataPropertyName = "NestedObj.Prop3"; // does not work
Run Code Online (Sandbox Code Playgroud)
我正在寻找建议和/或解决方法.
TIA
回到C的旧时代,人们可以使用数组下标以非常有用的方式解决存储问题.例如,可以声明一个数组.
该阵列表示具有8位字的EEPROM图像.
BYTE eepromImage[1024] = { ... };
Run Code Online (Sandbox Code Playgroud)
然后将该数组称为真正的多维存储
BYTE mpuImage[2][512] = eepromImage;
Run Code Online (Sandbox Code Playgroud)
我确定我的语法错了,但我希望你能理解.
无论如何,这投影了真正的单维存储的二维图像.
二维投影表示当加载到具有16位字的MPU的存储器中时的EEPROM图像.
在C中,可以多维度地引用存储并更改值,并且更改的值将显示在真实(单维)存储中,几乎就像魔法一样.
是否有可能使用C#做同样的事情?
我们当前的解决方案使用多个数组和事件处理程序来保持同步.这样的工作,但如果有更好的方法,我们希望避免额外的复杂性.
我需要在运行时将唯一标识符附加到对象.标识符在应用程序期间必须是唯一的.我计划在我的对象模型的基类中有一个私有成员变量.此变量将在对象初始化时设置,并且该值将在对象的生命周期内保持不变.在应用程序的持续时间内,没有其他对象可以具有相同的标识符.
当然,我可以使用System.Guid,但每个对象需要128位存储空间,而且我希望消耗更少的资源.我尝试使用Int32并使用System.Environment.TickCount属性对其进行初始化,但是我得不到足够的分辨率,并且某些对象最终会分配相同的值.
TickCounter的文档说,TickCount属性将在~29之后滚动到负值,然后在另外29天内回到零.随着时间的推移,我会很乐意交换更多的分辨率.
我还有其他我不了解的选择吗?
我有一个foreach循环,我想用Linq查询替换,但我无法弄清楚如何编写查询.请参阅下面的示例和TIA.
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class ExampleProgram
{
static void Main( string[] args )
{
Device device = new Device();
// The goal is to populate this list.
var list1 = new List<IMemory>();
// I would like to replace this loop with a Linq query
foreach( MemoryBank memoryBank in device.MemoryBanks )
{
list1.Add( memoryBank ); // add the memory bank
foreach( MemoryBlock memoryBlock in memoryBank.MemoryBlocks )
list1.Add( memoryBlock ); // add the memory block
}
//var list2 …Run Code Online (Sandbox Code Playgroud) 我试图更好地了解验证如何在Windows窗体应用程序中工作.互联网上充满了琐碎的例子,但我找不到一个解释控制验证的非平凡的例子.无论如何,多亏了SwDevMan81和Hans Passant,我从一个比昨天更好的地方开始.
"真正的应用程序"有一个包含许多TextBox控件的对话框.每个控件都实现Validating事件.正如您在示例中所看到的,ValidateChildren作为Click事件的结果被调用,导致Validating事件被发送到每个控件.该应用程序还使用ErrorProvider控件来提供用户反馈.昨天,我不明白如何使用Ok按钮Click事件来执行此验证.今天,我的对话框按预期工作.单击"确定"按钮会导致ErrorProvider执行控件无效且对话框未意外关闭的操作.
因此,虽然这似乎有效,但我感觉我"在线外".在Windows窗体应用程序中是否有用于控制验证的"最佳实践"文档/站点?
在许多令我困惑的事情中,当Ok按钮DialogResult属性设置为返回DialogResult.OK时,我无法找到对话框行为的解释.为什么设置此属性会干扰验证?(尝试使用和不使用该行的示例,看看我的意思.)
我昨天遇到的问题(看起来似乎)主要源于不了解ValidateChildren方法以及我将Ok按钮DialogResult属性设置为DialogResult.OK.将此属性设置为DialogResult.None似乎更改了Form类的一些自动行为.
TIA
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace ConsoleApp
{
class Program
{
static void Main( string[] args )
{
Dialog dialog = new Dialog();
if( dialog.ShowDialog() == DialogResult.OK )
Console.Beep();
}
}
public class Dialog : Form
{
TextBox m_TextBox0;
TextBox m_TextBox1; // not validated
TextBox m_TextBox2;
Button m_OkBtn;
Button m_CancelBtn;
ErrorProvider m_ErrorProvider;
public Dialog()
{
m_TextBox0 …Run Code Online (Sandbox Code Playgroud) 在下面的迷你应用程序中,我想知道为什么永远不会调用BtnOk_Validating事件处理程序.我希望单击"确定"按钮可以调用事件处理程序.
真正的对话框有更多控件,每个控件都有一个验证事件处理程序.我的计划是在允许关闭对话框之前使用Ok按钮验证事件处理程序来调用每个其他事件处理程序.
如果不是很明显,那么对于Forms开发来说,我就是新手.
using System.ComponentModel;
using System.Windows.Forms;
namespace ConsoleApp
{
class Program
{
static void Main( string[] args )
{
Dialog dialog = new Dialog();
dialog.ShowDialog();
}
}
public class Dialog : Form
{
Button m_BtnOk;
Button m_BtnCancel;
public Dialog()
{
m_BtnOk = new System.Windows.Forms.Button();
m_BtnCancel = new System.Windows.Forms.Button();
m_BtnOk.CausesValidation = true;
m_BtnOk.DialogResult = DialogResult.OK;
m_BtnOk.Text = "Ok";
m_BtnOk.Location = new System.Drawing.Point( 0, 0 );
m_BtnOk.Size = new System.Drawing.Size( 70, 23 );
m_BtnOk.Validating += new CancelEventHandler( BtnOk_Validating );
m_BtnCancel.CausesValidation = …Run Code Online (Sandbox Code Playgroud)