小编Gre*_*g D的帖子

如何在F#中正确实现属性?

考虑我的第一次尝试,F#中的一个简单类型,如下所示:

type Test() =
    inherit BaseImplementingNotifyPropertyChangedViaOnPropertyChanged()
    let mutable prop: string = null
    member this.Prop
        with public get() = prop
        and public set value =
            match value with
                | _ when value = prop -> ()
                | _ -> 
                    let prop = value
                    this.OnPropertyChanged("Prop")
Run Code Online (Sandbox Code Playgroud)

现在我通过C#测试它(这个对象正在暴露给C#项目,因此需要明显的C#语义):

[TestMethod]
public void TaskMaster_Test()
{
    var target = new FTest();
    string propName = null;
    target.PropertyChanged += (s, a) => propName = a.PropertyName;
    target.Prop = "newString";

    Assert.AreEqual("Prop", propName);
    Assert.AreEqual("newString", target.Prop);

    return;
}
Run Code Online (Sandbox Code Playgroud)

propName如果分配正确,我的F#Setter正在运行,但第二个断言失败,因为底层值prop没有改变.这种方式对我来说很有意义,因为如果我mutable …

f# mutable let-binding

6
推荐指数
3
解决办法
2817
查看次数

我应该何时选择IsolatedStorage与AppData文件存储?

我最近发现了IsolatedStorage.net中的设施,我想知道何时应该将它们用于我的应用程序数据,而不是我应该使用它(例如)Application.LocalUserAppDataPath.

我注意到的一件事是Application在winforms应用程序之外不存在,所以IsolatedStorage对于需要某些特定存储的类库来说似乎有意义,特别是如果该库可能被Web应用程序和winforms app.这是唯一的区别点,还是还有更多呢?

(作为一项规则,直到现在,我已经让应用程序在库可能需要某种外部存储时向库提供文件流 - 一般来说,我不喜欢库的想法调用者上下文外部的某种状态.)

.net isolatedstorage appdata

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

如何写入自定义 Windows 事件日志?

我正在尝试在 .net 中设置基本日志记录到 .net 中的 Windows 事件日志System.Diagnostics.EventLog,但我没有看到任何实际写入日志的事件。考虑以下代码:

// Elsewhere in the class
private static readonly string EventLogName = "LogName";
private static readonly string EventLogSource = "AppName";

// In the only function that does something
if (!EventLog.Exists(EventLogName))
{
    EventLog.CreateEventSource(EventLogSource, EventLogName);
    return;
}
else
{
    Trace.TraceInformation("Attempting log");

    // This doesn't write anything
    EventLog.WriteEntry(EventLogSource, 
        "StaticWriteEntry", 
        EventLogEntryType.Error);

    // Neither does this
    using (var log = new EventLog())
    {
        log.Log = EventLogName;
        log.Source = EventLogSource;
        log.WriteEntry("WriteEntry?", EventLogEntryType.Error);
    }
}
return;
Run Code Online (Sandbox Code Playgroud)

根据 MSDN 示例,我第一次创建日志并退出应用程序。当然,此日志创建最终将进入设置。后续运行尝试将消息记录到创建的事件日志中。 …

.net event-log custom-eventlog

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

如何使用"确定/取消"按钮为数据绑定WPF对话框设计支持数据类型?

我在Microsoft Sql CE中创建了一个表,用于保存一些数据.我已经通过SqlMetal生成了一个ORM,并且我将数据源拉入了我的WPF项目.

我想创建一个简单的WPF表单,可以通过ORM生成的类来编辑表中的记录.我希望这个表单支持典型的OK/Cancel语义.我已经在我认为是典型的时尚中创建了表单,在相应的字段上使用TwoWay数据绑定来绑定来自ORM的对象的实例.例如,给定ORM中具有属性"TaskName"的对象,我在WPF表单中包含以下内容:

<Label Grid.Column="0" Grid.Row="0" >
    Name:
</Label>
<TextBox Name="txtName" Grid.Column="1" Grid.Row="0" 
         Text="{Binding TaskName, Mode=TwoWay}" AcceptsReturn="False"
         MaxLines="1" />
Run Code Online (Sandbox Code Playgroud)

这与代码中的DataContext赋值相结合:

var newRow = new OrmGeneratedClass();
// Populate default values on newRow, e.g.    
detailWindow.DataContext = newRow;
detailWindow.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

可以合理地创建新行.通过表单进行的所有更改都会立即反映在底层的OrmGeneratedClass中.问题是,如果例如OrmGeneratedClass填充了先前保存的值,则不会立即支持取消更改.

对于这种情况,什么是好的设计,或者在我达到这一点之前我是否设计错了? 我是WPF和Sql Server数据源/ ORM集成方面的新手.(这是我用来学习这两种技术的个人项目.)

我有几个想法,并将他们放在答案中

data-binding wpf sql-server-ce linq-to-sql

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

如何更改ColorDialog的标题?

ColorDialog在WinForms中启动一个组件,让用户选择一个特定的自定义控件的图表的背景颜色和前景色.两个配置选项都在配置对话框的同一页面上,因此我想在对话框启动时将颜色对话框的标题设置为"背景颜色"以更改图表的背景,并将"网格颜色"设置为更改颜色的网格.这将提供一个有用的用户体验,如果用户不确定他们是否选择更改背景或网格颜色,他们将能够查看图表的标题.

不幸的是,文档似乎没有提到任何操纵ColorDialog标题的方法.是否可以进行此更改?如果是这样,怎么样?

.net colordialog winforms

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

创建用下划线替换空格的 WPF TextBox 的最佳方法是什么?

我正在FilteredTextBoxWPF 中创建一个子类化包含的TextBox控件。该FilteredTextBox范围内必须只允许字符[a-zA-Z0-9_]来输入,我已经得到了部分相当多的工作。我已经开始OnPreviewTextInput处理键入的字符,OnPreviewDrop过滤拖放的字符,并且我添加了一个 PreviewExecutedHandler,只要在控件上执行命令来处理粘贴,它就会运行。

到现在为止还挺好。

棘手的部分是控件还应该在输入时用下划线替换空格。

我想出了一个解决方案,但感觉很糟糕,我不知道它缺少什么。我觉得必须有一种我不知道的更好的技术。我所做的:

internal class FilteredTextBox : TextBox
{
    public FilteredTextBox()
    {
        CommandManager.AddPreviewExecutedHandler(this, this.HandlePreviewExecuteHandler);
    }

    private void HandlePreviewExecuteHandler(object sender, ExecutedRoutedEventArgs e)
    {
        var uiCmd = e.Command as RoutedUICommand;
        if (uiCmd != null && (uiCmd.Text == "Space" || uiCmd.Text == "ShiftSpace"))
        {
            // We're manually handling spaces, so we need to make appropriate checks.
            if (this.Text.Length == this.MaxLength) return;

            if (this.SelectionLength == 0)
            {
                // If …
Run Code Online (Sandbox Code Playgroud)

c# wpf textbox wpf-controls

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

让我的clickonce应用程序部分信任值得吗?

我即将开始研究针对内部客户的ClickOnce应用程序,以便在组织的Intranet上使用.我想简化设置过程,所以我认为开发部分信任的应用程序是个好主意,但现在我不太确定.

用户特别要求的一件事是(归结为)a TextBox与Cue Text.目前提供此功能的最简单方法是使用一个简单的子类,TextBox其中包含CueText功能作为属性.cuetext功能是通过PInvoke'd调用完成的SendMessage().

protected override void OnHandleCreated(EventArgs e)
{
    this.UpdateCueText();  // Bang, you're dead here
    base.OnHandleCreated(e);
}

private void UpdateCueText()
{
    if (this.IsHandleCreated)
    {
        NativeMethods.SendMessage(new HandleRef(this, this.Handle), setCueBannerMessage, this.showCueTextWithFocus ? new IntPtr(1) : IntPtr.Zero, this.cueText);
    }
}
Run Code Online (Sandbox Code Playgroud)

"啊哈!我需要SecurityPermission.UnmanagedCode." 默认的Intranet区域安全性包括SecurityPermission我可以告诉的权限,所以我尝试运行它,它会在调用时爆炸UpdateCueText().我甚至可以检查SecurityExceptionb/c 上的属性,每次尝试评估一个SecurityException属性都会引发另一个无法察觉的属性SecurityException.

我尝试标准修改:

protected override void OnHandleCreated(EventArgs e)
{
    var permission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
    permission.Assert();
    try
    {
        this.UpdateCue();
    }
    finally
    {
        CodeAccessPermission.RevertAssert();
    }
    base.OnHandleCreated(e); …
Run Code Online (Sandbox Code Playgroud)

c# clickonce pinvoke code-access-security

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

.Net异常偷看.(更新)

尝试
{
throw new Exception("test");
}
finally
{
//检查异常????
//日志(例外);
}

有没有办法从最终的运行时中获取异常?
我不能用捕获物:-)

谢谢你的回答.
我不能使用catch,因为它实际上不是我的代码(重构).
我们想要包装一段代码:

using(CriticalFlow(policy))  
{  
   //Not my code.  
   flow.Succeeded();  
}  
Run Code Online (Sandbox Code Playgroud)

在CriticalFlow finally块中,我们需要检查异常,如果没有调用成功,则以任何方式提醒任何人.
我希望它能为原来的问题提供一些启示.

再次感谢.

.net exception

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

C#如何:尝试在同一个班级中调用两次按钮?

在这里和网上进行了一些搜索并且还没有找到一个好的答案.我要做的是在C#中的同一个类中调用两次按钮.

这是我的情景 -

我有一个带有"Go"按钮的表单.当我第一次点击它时,它会通过一些'for'循环(不停)来显示颜色范围.同时我将button1.Text属性设置为"Stop".我希望能够第二次点击按钮,当发生这种情况时,我希望程序停止.基本上是一个走走停停的按钮.我知道如何使用2个按钮事件,但想使用1个按钮.

现在,结束程序的唯一方法是表单上的X按钮.

我尝试了不同的东西,到目前为止没有太多运气,所以想问这里的大师如何做到这一点.

顺便说一句,这是Head First Labs C#书籍练习的修改.

谢谢!

〜艾伦

c# winforms

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

存储文件上的OpenReadAsync调用挂起

我正在读取一个文件,该文件存在于通用窗口应用程序范围中,从一个外部项目添加为.dll到第一个.代码似乎在GetFileAsync中卡住或挂起.此外,当我从应用程序而不是.dll项目运行相同的存根时,它可以工作.我需要知道是否有一种不同的方法从.dll项目中读取Application文件夹中的文件,以便在同一个项目中使用.读取文件的代码:

private static async Task<Stream> getStreamAsync()
{
    try
    {
        StorageFolder storageFolder = Package.Current.InstalledLocation;
        StorageFile file = await storageFolder.GetFileAsync("file.json");
        Stream stream = null;
        if (file != null)
        {
            var randomAccessStream = await file.OpenReadAsync().AsTask().ConfigureAwait(false);
            stream = randomAccessStream.AsStreamForRead();
        }

        return stream;
    }
    catch (Exception ex)
    { }
}

private Stream fetchStream()
{
    var stream = getStreamAsync().Result;
    return stream;
}

private func()
{
    Stream StreamFetched = fetchStream();
}
Run Code Online (Sandbox Code Playgroud)

c# async-await win-universal-app uwp

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