小编AMi*_*ico的帖子

在.NET中,为什么我可以在类中访问类实例的私有成员?

在清洗一些代码,今天是别人写的,我是从改变访问修饰符PublicPrivate上一类变量/成员/场.我期待一长串编译器错误,我用它来"重构/返工/审查"使用此变量的代码.想象一下,当我没有收到任何错误时,我感到惊讶.在审阅之后,事实证明,Class的另一个实例可以访问Class中声明的另一个实例的私有成员.完全未被发现.

这是正常的吗?我从一开始就在.NET中编写代码,从未遇到过这个问题,也没有读过它.我之前可能偶然发现它,但只是"模糊地注意到"并继续前进.任何人都可以向我解释这个行为吗?我想知道"为什么"我能做到这一点.请解释一下,不要只告诉我规则.难道我做错了什么?我在C#和VB.NET中都发现了这种行为.代码似乎利用了访问私有变量的能力.缺点是程序员创造了一大块Spaghetti.

此致

  • 完全困惑

Class Jack
    Private _int As Integer
End Class
Class Foo
    Public Property Value() As Integer
        Get
            Return _int
        End Get
        Set(ByVal value As Integer)
            _int = value * 2
        End Set
    End Property
    Private _int As Integer
    Private _foo As Foo
    Private _jack As Jack
    Private _fred As Fred
    Public Sub SetPrivate()
        _foo = New Foo
        _foo.Value = 4  'what you would expect to do because _int is private
        _foo._int …
Run Code Online (Sandbox Code Playgroud)

.net class-design

7
推荐指数
2
解决办法
1701
查看次数

"资源字典(WPF)"命名约定和管理建议

只是想问一个关于人们用于"资源字典(WPF)"项目的命名约定的一般性问题.

在我继承的项目中,我有各种各样的命名约定的资源字典.因此,我正在寻找管理资源词典的建议.

请从任何答案中排除Themes文件夹和那些资源词典.

wpf xaml naming-conventions resourcedictionary

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

我只需要一个显示多行的简单WPF工具提示样式

由于所有关于花哨,超级,巨大和哇哇,哇哇,哇哇,工具提示的噪音,我找不到答案.

我只需要一个简单的样式设置TextWrapping="Wrap"并允许我设置宽度.

一个复制现有/默认样式,但只是单词换行.

wpf styles tooltip

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

(New Object()).VB.net中的Method()

显然,这不起作用.

为什么???????

我不想只是为了调用我的函数来做这一切:

Dim x as new Object()
x.Method()
Run Code Online (Sandbox Code Playgroud)

当我可以在一个行中时,为什么必须用两行来完成.

vb.net constructor

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

需要帮助设置具有透明背景的图像到剪贴板

我需要帮助设置透明图像到剪贴板.我一直得到"处理无效".基本上,我需要一个"第二组眼睛"来查看以下代码.(ftp://missico.net/ImageVisualizer.zip上的完整工作项目.)

这是一个图像Debug Visualizer类库,但我使包含的项目作为可执行文件运行进行测试.(请注意,窗口是工具箱窗口,任务栏中的显示设置为false.)我厌倦了必须在工具箱窗口上执行屏幕捕获,使用图像编辑器打开屏幕捕获,然后删除添加的背景,因为它是一个屏幕截图.所以我想我会很快将透明图像放到剪贴板上.好吧,问题是......没有对Clipboard.SetImage的透明度支持.谷歌救援......并不完全.

这就是我到目前为止所拥有的.我从众多消息来源中撤出.请参阅主要参考的代码.我的问题是使用CF_DIBV5时的"无效句柄".我需要使用BITMAPV5HEADER和CreateDIBitmap吗?

GDI/GDI + Wizards的任何帮助将不胜感激.

    public static void SetClipboardData(Bitmap bitmap, IntPtr hDC) {

        const uint SRCCOPY = 0x00CC0020;
        const int CF_DIBV5 = 17;
        const int CF_BITMAP = 2;

        //'reference
        //'http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/816a35f6-9530-442b-9647-e856602cc0e2

        IntPtr memDC = CreateCompatibleDC(hDC);
        IntPtr memBM = CreateCompatibleBitmap(hDC, bitmap.Width, bitmap.Height);

        SelectObject(memDC, memBM);

        using (Graphics g = Graphics.FromImage(bitmap)) {

            IntPtr hBitmapDC = g.GetHdc();
            IntPtr hBitmap = bitmap.GetHbitmap();

            SelectObject(hBitmapDC, hBitmap);

            BitBlt(memDC, 0, 0, bitmap.Width, bitmap.Height, hBitmapDC, 0, 0, SRCCOPY);

            if (!OpenClipboard(IntPtr.Zero)) {
                throw new System.Runtime.InteropServices.ExternalException("Could not open Clipboard", …
Run Code Online (Sandbox Code Playgroud)

clipboard transparency gdi+ gdi winforms

6
推荐指数
2
解决办法
1811
查看次数

在表单加载后立即调用方法的最佳方法是什么?

我有一个C#windows窗体应用程序.我当前设置它的方式,当Form1_Load()运行时,它检查恢复的未保存数据,如果找到一些,它会提示用户是否要打开该数据.当程序运行时,它可以正常工作但是消息框会立即显示,并且主程序表单(Form1)在用户单击是或否之后才会显示.我想首先弹出Form1然后弹出消息框提示.

现在,在我在Form中创建一个计时器之前解决这个问题,在Form1_Load()方法中启动计时器,然后在第一个Timer Tick事件中执行检查和用户提示.这种技术解决了这个问题,但似乎可能有更好的方法.

你们有更好的想法吗?

编辑:我想我也使用后台工作人员做类似的事情.通过调用方法返回到表单线程所有麻烦似乎有点傻了,所有的垃圾只是让它延迟了几毫秒!

.net c# winforms method-call form-load

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

Excel单元格格式问题

我正在使用OleDB DataReader从我的excel文件中获取数据(但是这个问题也出现在DataTable.Fill中).问题是我有一个应该返回字符串的列.一切都很好并且工作但是最近出现了一个问题,因为列的单元格具有不同的格式.有些是数字,有些是文本.当我使用dataReader.GetSchema()检查时,它显示有问题的列被推断为类型System.String.这个问题是所有非文本单元格都立即设置为null.

有没有办法向读者建议该列应该只是将列解析为System.Object而不是将其推断为System.String并转储所有非字符串单元格?

我正在使用的连接字符串是:

string connString ="Provider = Microsoft.Jet.OLEDB.4.0;" +"数据源="+ filePath +";" +"扩展属性= Excel 8.0;";

而代码是:

using ( OleDbConnection connection = new OleDbConnection( connString ) )
{
    connection.Open();
    foreach ( string worksheetName in worksheetNames )
    {
        using ( OleDbCommand command = 
            new OleDbCommand( "SELECT * FROM [" + worksheetName + "]", connection ) )
        {
            TEntity entity;
            using ( OleDbDataReader dataReader = command.ExecuteReader() )
            {
                while ( dataReader.Read() )
                {
                    entity = GetDataFromDataTable( dataReader );

                    if ( entity != null …
Run Code Online (Sandbox Code Playgroud)

.net oledb excel

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

VB.NET结构和没什么 - 问题

我在使用结构和函数时遇到了一些麻烦,这些函数在VB.NET中返回Nothing.

让我试着用这段代码解释一下:

Public Class Form1
    Structure Test
        Dim field1 As String
    End Structure

    Private Function Foo() As Test
        Return Nothing
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim st As Test = Foo()
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

在前面的代码中,当我返回Nothing作为Foo函数的结果时,我希望stNothing.但这不是发生的事情.

然后我在MSDN文档中找到:

为变量赋值Nothing将其设置为其声明类型的默认值.如果该类型包含变量成员,则它们都设置为其默认值.

所以我发现当我为结构分配Nothing时,它的所有成员都被设置为默认值,而不是结构本身.

另外,我试图通过声明:使st成为Nullable类型:

    Dim st As Nullable(Of Test) = Foo()  
Run Code Online (Sandbox Code Playgroud)

但是,我仍然无法使用以下方法检查st是否为Nothing:

    If st Is Nothing Then  
Run Code Online (Sandbox Code Playgroud)

要么

    If st.Equals(Nothing) Then
Run Code Online (Sandbox Code Playgroud)

那么,问题:
1 - 是否可以为结构而不是其成员分配 …

.net vb.net structure nothing data-structures

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

如何将视图模型方法的结果绑定到TextBox属性?

在我的视图模型和模型中,我有一个带有签名的方法bool IsPropertyReadOnly(string propertyName).此方法确定当前登录的用户是否可以编辑属性值.一些用户将能够编辑属性值,而其他大多数用户将具有只读访问权限.

而不是创建一个属性返回每个模型的属性的只读状态的,我要的结果绑定IsPropertyReadOnyTextBox.IsReadOnly属性.

这就是我设想的语法:

<TextBox Text="{Binding Address, Mode=TwoWay}" 
         IsReadOnly="{Binding MethodName=IsPropertyReadOnly MethodParameter=Address}"
/>
Run Code Online (Sandbox Code Playgroud)

DataContext包含视图模型,所以基本上我需要绑定IsReadOnly到调用的结果((Class)this.DataContext).IsPropertyReadOnly("Address")

使用an时有很多文档ObjectDataProvider,但是对象数据提供程序创建了一个不是我想要的新对象实例.而且,要使用现有实例,我必须在代码隐藏中进行赋值.再一次,不是我想做的.

从我的研究来看,似乎是一种继承BindingMarkupExtension更适合我需求的解决方案.

任何帮助将不胜感激.

data-binding methods wpf xaml markup-extensions

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

如何可靠地确定WPF应用程序中是否正在使用`ControlTemplate`?

如何可靠地确定ControlTemplateWPF应用程序中是否使用了以下内容?文件名是'CheckBoxTemplates.xaml',并且与主应用程序位于不同的程序集中.注意,当我搜索文件名和资源键时没有结果.此外,在解决方案中搜索资源键是不可靠的.特别是,当有五个资源字典文件包含相同的密钥时.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna">
    <Style x:Key="invertedCheckBox"
           TargetType="CheckBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate  TargetType="CheckBox"
...
Run Code Online (Sandbox Code Playgroud)

更多信息

user2250152应答者对于上述XAML是正确的.它无法可靠地确定是否正在使用样式.我这样说是因为当我将这种技术用于另一种风格时,我发现了五个包含相同密钥的资源字典文件.因此,我们必须考虑如何可靠地确定使用重复键定义的样式.

.net wpf controltemplate

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