小编Bla*_*ght的帖子

您如何获得当前登录用户的凭据(NetworkCredential)?

我正在编写一些代码来使用第三方组件,我需要提供一个在我开始使用它时实现ICredentials的对象.

如果我写以下内容......

var credential = new NetworkCredential("MyUsername", "MyPassword");
Run Code Online (Sandbox Code Playgroud)

...并通过"凭证",没关系.但我想传递当前用户的凭据(它是一个Windows服务,因此以指定用户身份运行).

我尝试了以下两种方法,但似乎都不起作用(或返回任何内容):

NetworkCredential credential = System.Net.CredentialCache.DefaultCredentials;
NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何获取approriate对象,该对象代表运行该服务的用户名的凭据?

谢谢,罗斯

.net defaultnetworkcredentials

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

如何在值共享相同名称的枚举之间进行转换?

如果我想在两种Enum类型之间进行转换,我希望它们的值具有相同的名称,是否有一个简洁的方法,或者我必须这样做:

enum colours_a { red, blue, green }
enum colours_b { yellow, red, blue, green }

static void Main(string[] args)
{
    colours_a a = colours_a.red;
    colours_b b;

    //b = a;
    b = (colours_b)Enum.Parse(typeof(colours_b), a.ToString());
}
Run Code Online (Sandbox Code Playgroud)

c# enums

11
推荐指数
2
解决办法
7212
查看次数

PropertyGrid没有注意到代码中的属性发生了变化?

我有一个Winform应用程序,它使用颜色突出显示某些事物.我想让用户改变'他们'的颜色.作为练习,我想我会创建一个类的实例,其中包含颜色的属性,并将其分配给属性网格(以获得一个漂亮的编辑器).

这似乎工作正常,但我想我想让用户重置颜色(在他们摆弄并将它们设置为20个米色)之后.所以,我在表单中添加了一个"重置"按钮,它将我的对象的颜色属性设置回默认值.

但是,它似乎在设置我的对象属性时,属性网格不会改变.如果在重置后,我执行属性网格"刷新",它具有重置颜色.

我假设属性网格不知道底层对象已被更改?

在这种情况下是否缺少某些东西,或者我应该接受它并在重置对象时调用Refresh方法?

谢谢

(这里非常相似的问题)

public partial class Form1 : Form
{
  public Form1()
  {
     InitializeComponent();

     this.propertyGrid1.SelectedObject = new Colours();
  }

  private void button1_Click(object sender, EventArgs e)
  {
     Colours colours = this.propertyGrid1.SelectedObject as Colours;
     colours.Reset();
  }
}

public partial class Colours : INotifyPropertyChanged 
{
  public event PropertyChangedEventHandler PropertyChanged;

  public Color ColourP1 { get; set; }

  public void Reset()
  {
     this.ColourP1 = Color.Red;
     var handler = this.PropertyChanged;
     if (handler != null) handler(this, new …
Run Code Online (Sandbox Code Playgroud)

c# data-binding propertygrid inotifypropertychanged winforms

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

在多列上对DataGridView进行排序?

我已经搜索了一个在多列上对DataGridView进行排序的示例,但似乎无法找到符合我想要的示例.

基本上,我有一个绑定的DataGridView控件(绑定到DataTable/DataView),绑定的DataTable有两列: - priority和date.我想按优先顺序按日期排序.也就是说,优先级列采用优先级,然后是日期,但两者都可以是升序或降序.

因此,例如,我可能具有低优先级,早期日期优先(按优先级asc,日期asc排序),并且通过单击日期列标题,切换到低优先级,晚期日期优先(按优先级顺序asc,日期desc).如果我然后单击优先级,我希望首先具有高优先级,然后是较晚的日期(日期列的当前排序顺序 - 按优先级desc排序,日期desc),但是然后可以单击日期列标题切换到高优先级,早期日期(按优先级desc,日期asc排序).

理想情况下,我想在两列上对字形进行排序以显示升序或降序.

我们将非常感激地提出任何想法或建议.

这个(见下文)似乎非常接近,但字形无法正常工作.

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
  public partial class Form1 : Form
  {
     DataSet1 dataset;

     public Form1()
     {
        InitializeComponent();

        dataset = new DataSet1(); // two columns: Priority(Int32) and date (DateTime)
        dataset.DataTable1.AddDataTable1Row(1, DateTime.Parse("01-jan-10"));
        dataset.DataTable1.AddDataTable1Row(1, DateTime.Parse("02-jan-10"));
        dataset.DataTable1.AddDataTable1Row(1, DateTime.Parse("03-jan-10"));
        dataset.DataTable1.AddDataTable1Row(2, DateTime.Parse("04-jan-10"));
        dataset.DataTable1.AddDataTable1Row(2, DateTime.Parse("05-jan-10"));
        dataset.DataTable1.AddDataTable1Row(2, DateTime.Parse("06-jan-10"));
        dataset.DataTable1.AddDataTable1Row(3, DateTime.Parse("07-jan-10"));
        dataset.DataTable1.AddDataTable1Row(3, DateTime.Parse("08-jan-10"));
        dataset.DataTable1.AddDataTable1Row(3, DateTime.Parse("09-jan-10"));

        dataGridView1.DataSource = dataset.DataTable1.DefaultView;

        dataGridView1.AllowUserToAddRows = false;

        dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.Programmatic;
        dataGridView1.Columns[1].SortMode = DataGridViewColumnSortMode.Programmatic; …
Run Code Online (Sandbox Code Playgroud)

c# sorting datagridview

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

抛出与捕获的类型相同的C#异常?

为什么(如果有的话)这是一个坏主意?

class Program
{
  static void Main(string[] args)
  {
     try
     {
        throw new NotImplementedException("Oh dear");
     }
     catch (Exception ex)
     {
        throw NewException("Whoops", ex);
     }
  }

  // This function is the salient bit here
  public static Exception NewException(String message, Exception innerException)
  {
     return Activator.CreateInstance(innerException.GetType(), message, innerException) as Exception;
  }
}
Run Code Online (Sandbox Code Playgroud)

这里重要的一点是该函数创建了与"innerException"相同类型的异常.

我在想......"哦......发生了异常.我实际上无法在这里处理它,但我可以添加一些额外的信息,并重新抛出.也许是另一个处理程序,更高的调用链可以处理它."

一个恰当的例子可能是某种SQL错误.我可能无法在调用时处理异常,但可能希望添加一些额外的"上下文"信息,例如"我正在调用它,并传递它".

似乎将调用链作为最初引发的类型的异常传递回来可能是有用的,而不是"Exception"或"ApplicationException".我知道我可以创建自己的自定义异常类,但是当你已经有一个很好的特定异常时,它似乎没有增加任何东西.

当然,我可能错了.这可能是一件非常有用的事情......但是一个小小的声音暗示着没有.

-----编辑-----

为了辩论,请考虑以下两个函数的效果(使用上面的代码):

这......经常看到:

  static int SalesTotal(int customerNumber)
  {
     try
     {
        throw new DivideByZeroException(); // something you didn't expect
     }
     catch (Exception ex)
     {
        throw new ApplicationException("Unable …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling

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

在C#中编写IsDate()等价物?

如果之前有人问过,请道歉.我有一些数据需要存储为字符串,其中一些数据是日期.数据以"01/02/10" (英国格式)等字符串开头.现在,稍后,这个数据被解析,并且根据解析的不同,结果是不同的(例如,01-Feb-10对比02-Jan-10).鉴于数据以字符串形式开始,在我存储它之前,我想说,"如果这看起来像日期,请将其格式化为dd-mmm-yy".

麻烦的是很多东西看起来像是DateTime.Parse()函数的日期.

所以,我应用了一些规则,只为我的检查接受"合理的"日期格式,并写了一个IsDate()函数.我正在寻求关于如何做到这一点的建议,因为虽然它有效但我的解决方案看起来非常笨重.

如果你曾经开始在它上面抛出随机字符串(比如"3/4"和"6.12"),那么我做这个而不是按照常规的DateTime.TryParse例程的原因很明显.

这是我到目前为止所拥有的:

class Program
{
  static void Main(string[] args)
  {
     Debug.Assert(IsDate(6.12) == false);
     Debug.Assert(IsDate("3/4") == false);
     Debug.Assert(IsDate(010210) == false);
     Debug.Assert(IsDate("010210") == false);
     Debug.Assert(IsDate("12-jan-2000") == true);
     Debug.Assert(IsDate("12-12-20") == true);
     Debug.Assert(IsDate("1/1/34") == true);
     Debug.Assert(IsDate("09/30/20") == false);
     Debug.Assert(IsDate(DateTime.Now) == true);
  }

  static Boolean IsDate(Object value)
  {
     DateTimeFormatInfo DateTimeFormatGB = new CultureInfo("en-GB").DateTimeFormat; // new CultureInfo("en-US").DateTimeFormat;
     return IsDate(value, DateTimeFormatGB);
  }

  static private List<String> AcceptableDateFormats = new List<String>(72);
  static Boolean IsDate(Object value, DateTimeFormatInfo formatInfo)
  {
     if (AcceptableDateFormats.Count == 0) …
Run Code Online (Sandbox Code Playgroud)

c# validation datetime

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

您如何从Word文档中获取主题和标题(不打开它)?

我想从Word文档中读取标题和主题字段,但是宁愿没有启动Word的开销。

如果在Windows资源管理器中显示标题和主题列,然后导航到其中包含Word文档的文件夹,则会显示此信息。使用什么机制来执行此操作(除了Shell扩展之外),因为它的速度很快(但是我不知道您是否真的需要安装Word才能运行此功能),所以我猜测它不会启动Word并打开每个文档。

我已经找到了我可以使用的Dsofile.dll链接,但这对.doc和.docx文件有用吗,这是唯一的方法吗?

c# ms-word ms-office

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