如何在c#中创建可点击的不规则形状区域

我有一个像心脏或任何随机形状的不规则形状的图片。 我可以在视觉上使它透明,但我需要让它只在形状区域上可点击。 我听说我应该使用“Region”,但我无法弄清楚如何。 我试图搜索所有非空,透明或空的像素并使用它们创建一个点数组,但我无法创建/重塑当前控制区域。 我正在尝试制作一个自定义控件,你可以选择一个按钮或图片,它们是不规则形状并且彼此靠近。 这是我正在处理的事情: 正如您在图片中看到的,有8个不同的部分(假设右侧和左侧组合)。 正如您所看到的,它们彼此接近,其中一些甚至适合其他人之间的空白区域。 我的目标是,例如,如果我点击Pectorals(图中的红色区域),它将变为彩色版本,并运行一堆其他代码。 问题是,默认情况下,当我们使用PictureBox添加任何Picture时,它将从该边界开始围绕该图片创建一个Rectangle 。 因此,如果我将两张图片(如图所示)放在一起,则一个空区域会阻止我点击另一张图片。 由于这个问题,它也引发了错误对象的ClickEvent 。 我正在尝试设置“提升事件区域”,我假设我们将Graphic Region称为图像存在的位置。 我可以通过循环收集像素的位置,该循环确定该图片的哪个坐标具有“颜色”(意味着它是图片的一部分,我想要点击的区域)但是我不能用该数据限制该区域。 我想要实现的一个例子: https : //www.youtube.com/watch?v = K_JzL4kzCoE 做这个的最好方式是什么?

温莎城堡奇怪的行为与财产注入和工厂方法

我在ASP.NET MVC项目中使用Castle Windsor 2.5.1并使用属性注入来创建一个我期望在基本控制器类上始终可用的对象。 我正在使用工厂来创建这个对象,但是如果构造函数中有错误,我根本不会收到来自Windsor的警告,它只返回我的对象​​但没有注入属性。 这是预期的行为,如果是这样,当工厂无法返回任何内容时,如何引发错误? 这是一个例子 public class MyDependency : IMyDependency { public MyDependency(bool error) { if (error) throw new Exception(“I error on creation”); } } public interface IMyDependency { } public class MyConsumer { public IMyDependency MyDependency { get; set; } } [TestFixture] public class ProgramTest { [Test] public void CreateWithoutError() //Works as […]

Yahoo Mail的C#SMTP电子邮件发送代码失败但对其他服务器工作正常,有人可以帮忙吗?

我正在使用此代码通过yahoo SMTP服务器发送SMTP电子邮件,它是我正在编写的个人项目。 using System.Net.Mail; using System.Net; SmtpClient theClient = new SmtpClient(“smtp.mail.yahoo.com”, 465); theClient.UseDefaultCredentials = false; theClient.Credentials = new NetworkCredential(“username”, “password”); theClient.EnableSsl = true; MailMessage theMessage = new MailMessage(“username@yahoo.com”, “to.someone@gmail.com”); theMessage.Subject = “Dave test from C# subject”; theMessage.Body = “Dave test from C# body”; theClient.Send(theMessage); 它是用于发送SMTP电子邮件的非常标准的代码,但是…服务器似乎抛出错误。 它强行终止连接。 如果我使用其他SMTP服务器(如Gmail,Windows Live或其他各种ISP Smtp服务器),则不会发生这种情况。 这是exception和堆栈跟踪: System.IO.IOException: Unable to read data […]

绘制2D热图

我有一张图表,我想要绘制热图; 我所拥有的唯一数据是湿度和温度,它代表图表中的一个点。 如何在c#中获取图表上的矩形热图? 我想要的是类似于下图: 我真正想要的是图表中的一个矩形区域,它根据我从点列表中得到的点以不同的颜色绘制,并在图表中形成彩色部分。

C# – 将XML命名空间(xmlns)标记添加到文档

我正在使用C#中的System.XML创建XML文档。 我差不多完成了,但我需要在文档的顶部添加一些类似的内容: 我需要在下面的地方添加: 我使用以下代码创建它: XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true }; 在此之后,我继续创建我的XML文档,现在已经完成,但我需要在中间添加它。 谢谢 约翰

为什么PLINQ只使用两个线程?

说我有一个IO绑定任务。 我使用WithDegreeOfParallelism = 10和WithExecution = ForceParallelism模式,但查询仍然只使用两个线程。 为什么? 我知道PLINQ通常会选择一个与我的核心数相等的并行度,但为什么它忽略了我对更高并行性的特定要求呢? static void Main(string[] args) { TestParallel(0.UpTo(8)); } private static void TestParallel(IEnumerable input) { var timer = new Stopwatch(); timer.Start(); var size = input.Count(); if (input.AsParallel(). WithDegreeOfParallelism(10). WithExecutionMode(ParallelExecutionMode.ForceParallelism). Where(IsOdd).Count() != size / 2) throw new Exception(“Failed to count the odds”); timer.Stop(); Console.WriteLine(“Tested ” + size + ” numbers […]

C#DataTable到Json?

我想将DataTable作为Json格式在图表上显示。 public JsonResult GetDataTable() { DataTable dt = new DataTable(); dt.Columns.Add(“Jan”); dt.Columns.Add(“Feb”); dt.Columns.Add(“Mar”); dt.Columns.Add(“Apr”); for (int i = 0; i < 10; i++) { dt.Rows.Add(i * 5, i * 10, i * 15, i * 11); } // JsonDataTable = dt to Json return new JsonResult { Data = new { success = true, chartData […]

拆分/组合部分方法

我了解部分方法可用于跨多个文件拆分方法的定义。 我很好奇,但是允许跨多个文件的方法的每个定义都包含代码吗? 例如,假设我有一个方法private partial void Foo() 。 假设我已经在文件A和文件B中定义了它。两个实例都可以包含方法中的代码,还是只包含其中一个? 如果允许,我想我会感到惊讶。

如何使用HttpClient PostAsync计算进度?

在我的Windowsapp store应用程序(c#)中,我需要将MultipartFormDataContent (一些字符串内容和一些文件)上传到服务器并在响应时获取一个巨大的文件。 问题 – 我不能使用BackgroundDownloaders 。 我只能使用一个请求。 我使用HttpClient.PostAsync方法: using (var client = new HttpClient(httpClientHandler)) { using (var content = new MultipartFormDataContent()) { content.Add(…); // prepare all strings and files content try { using (var response = await client.PostAsync(url, content)) { if (response.StatusCode == HttpStatusCode.OK) { var inputBytes = await response.Content.ReadAsByteArrayAsync(); // some operations with […]

XML到C#类问题

有人可以帮助我,我有这个xml片段 123 email@whereEver.com 我想从中创建一个corressponding c#类。 在您说“只使用xsd.exe”之前,Xsd的输出无法序列化和反序列化正确,因为它使用部分类生成类。 请问你能告诉我如何创建这个类….这是我采取的方法,但它不起作用。 public class EmailConfiguration { private string dataBoxID; public string DataBoxID { get { return dataBoxID; } set { dataBoxID = value; } } private DefaultSendToAddressCollectionClass defaultSendToAddressCollection; public DefaultSendToAddressCollectionClass DefaultSendToAddressCollection { get { return defaultSendToAddressCollection; } set { defaultSendToAddressCollection = value; } } } 这是子类的类声明 public class DefaultSendToAddressCollectionClass { […]