|
Hi everybody,
I would like to set a background image to a Groupbox and have it displayed at run time.
Below are the lines inserted in the xaml file at the appropriate locations:
<Window.Resources>
<VisualBrush x:Key="myNewBrush">
<VisualBrush.Visual>
<Grid>
<Rectangle Fill="Transparent"/>
<Image Source = "/Resources/Images/BartMap.png"/>
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Windows.Resources>
<GroupBox Grid.Row="1" Grid.Column="0" Background="Transparent">
<GroupBox.Header>
<Label FontWeight="Bold">Track plan </Label>
</GroupBox.Header>
<Grid Background="{StaticResource myNewBrush}">
</Grid>
</GroupBox>
My problem: The image background is not displayed at runtime.
Could anyone help me with this issue?
Best regards,
Hervend
Hervend
|
|
|
|
|
|
The following is an add-in for MS Outlook. One can scan the body of an e-mail and if there is a certain (specific word or pattern) word present, then a MessageBox appears. However, I am wondering if it is possible to change the way a word appears or to edit the text in the body of email, without MessageBox whatsoever. For example, a word (such as the name of the company) can be converted into an hyperlink (i.e. Google to www.google.com or Microsoft to www.microsoft.com) and the user who reads emails on Outlook always sees the hyperlink instead of the word itself.
<pre lang="c#">using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using System.Drawing;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace FirstOutlookAddIn
{
public partial class ThisAddIn
{
public static string[] data = new string[10];
public static Stopwatch timer = new Stopwatch();
Outlook.NameSpace outlookNameSpace;
Outlook.MAPIFolder inbox;
Outlook.Items items;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
timer = Stopwatch.StartNew(); ReadMail();
outlookNameSpace = this.Application.GetNamespace("MAPI");
inbox = outlookNameSpace.GetDefaultFolder(
Microsoft.Office.Interop.Outlook.
OlDefaultFolders.olFolderInbox);
items = inbox.Items;
items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(ReadSingleMail);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
static void ReadSingleMail(dynamic item)
{
string bodyText;
string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (item != null)
{
bodyText = item.Body;
}
else
{
return;
}
}
static void ReadMail()
{
string bodyText;
string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items unreadItems = inboxFolder.Items.Restrict("[Unread]=true");
int max_runs;
if (unreadItems.Count > 10) { max_runs = 10; }
else max_runs = unreadItems.Count;
for (int counter = 1; counter <= max_runs; counter++)
{
for (int index = 0; index <= 8; index++)
{
data[index] = "";
}
dynamic item = unreadItems[counter];
bodyText = item.Body;
Match match = Regex.Match(bodyText, "Insert searched pattern here");
if (match.Success)
{
MessageBox.Show(match.Value);
match = match.NextMatch();
}
}
}
#region Von VSTO generierter Code
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
|
|
|
|
|
Not sure about Germany, but in many countries changing the content of mail messages would be viewed as illegal.
|
|
|
|
|
I don't think that the concept of an outlook-addin is illegal, similar to spellcheckers.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
It depends whether it is selected and installed by the user, or forced on them.
|
|
|
|
|
It "may" be enforced by company-policies. If it is without the knowledge and consent of the owner then it would always be illegal, regardless of what it does.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
A quick look on MSDN shows that the "Body" string is read/write, but I'm not sure whether that means that editing is supported from code.
I'd prefer saving those mails in a SQL Server and processing them there - also a lot easier with debugging in the future, and no dependency on (a specific version of) Outlook.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Creating the function ReadMail() as below replaces text, as I want it.
static void ReadMail(){
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items Items = inboxFolder.Items.Restrict("[LastModificationTime] > '01/1/2003'");
foreach (var item in Items){
var mail = (Outlook.MailItem)item;
mail.Body = mail.Body.Replace("Text to be replaced", "Replacing text");
mail.Save();
}
}
|
|
|
|
|
Hi,
how can i set windows form over other programs at the desktop in c#?
i mean i have a form that is like a tool bar that always
has to be at top on the screen and all other programs that are running(like chrome, ie..) should be below it.
the form must by always visible to the user (topmost=true), and will not hide part of other programs windows.
|
|
|
|
|
That's not really possible, even for a topmost window - which is above all the others - you can't prevent other applications from "using" part of the desktop: there is no way to stop an app from (for example) maximizing and expecting to get the whole screen.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
|
You're welcome.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
I give users an option (check box) if they want a particular "window" "on top" (like a log).
Because, often a dialog / window they need to interact with will appear "below" this top window, and then they cannot interact with it (e.g. press "OK") because it is covered (and they don't know how to "move" it).
If a window has a "top most", at least allow the user to "minimize" it if it must always be "available".
I'll "flash" the title bar, so even if a window is minimized, the user knows I'm still "logging their mistakes" (or whatever).
(And "close" simply "hides" these windows; keeping content intact for the next item).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Desktop toolbars are a thing of the past, but if you must...
Keep in mind that some applications don't respect the new Desktop size taking into consideration the toolbar boundaries. They will go by screen size instead, which toolbars don't change, overlaying their window on top of your toolbar.
|
|
|
|
|
hi
i'm getting the following error when trying to push notification to multiple ios devices
Error:
System.IO.IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) when pushing notification to apple
any help?
Thank u
|
|
|
|
|
"any help?" How about, have you got any code?
|
|
|
|
|
not getting any code , just i'm getting that exception after pushing some tokens
|
|
|
|
|
If you don't show us any relevant code that you have written, you are just wasting our time and yours. You might as well just google what triggers that exception.
This space for rent
|
|
|
|
|
this is my code
int port = 2195;
String hostname = "gateway.push.apple.com";
try
{
TcpClient client = new TcpClient(hostname, port);
SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
try
{
sslStream.AuthenticateAsClient(hostname, certificatesCollection, System.Security.Authentication.SslProtocols.Tls, false);
for (int i = 0; i < Token.Length; i++)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, dt=" + Token[i]);
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
writer.Write((byte)0);
writer.Write((byte)0);
writer.Write((byte)32);
writer.Write(HexStringToByteArray(Token[i]));
String payload = "{ \"aps\" : { \"alert\" : {\"title\" : \"" + szAppName + "\",\"body\" : \"" + message + "\",\"Type\" : \"" + szType + "\"} }}";
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, payload=" + payload.ToString());
writer.Write((byte)0);
byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload);
writer.Write((byte)b1.Length);
writer.Write(b1);
writer.Flush();
byte[] array = memoryStream.ToArray();
sslStream.Write(array);
sslStream.Flush();
}
client.Close();
}
catch (System.Security.Authentication.AuthenticationException ex)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, AuthenticationException=" + ex.ToString());
client.Close();
}
catch (Exception exp)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, Exception=" + exp.ToString());
client.Close();
}
}
catch (Exception ex)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, Exception1=" + ex.ToString());
}
|
|
|
|
|
You're using a "TcpClient" (Socket), but I do not see you actually "opening" (and testing) the "connection".
i.e. You need to "connect" at some point.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
New to C# and want to know the best way to use the TaskFactory class and how to make sure I am populating my dataGridView rows correctly. Right now, I am only seeing a value in the last dataGridView row. Example: (If I have 3 dataGridView rows I am trying to populate, I only see the output in the 4th unpopulated row.) So, my question is: Am I using TaskFactory correctly and in the most efficient way and how do I make sure I am populating my dataGridView rows correctly. I am using .NET 4.5.51209 and VS 2010
if (dataGridView1.Rows.Count > 1)
{
for (int index = 0; index < dataGridView1.Rows.Count-1; index++)
{
string gridDevice = dataGridView1.Rows[index].Cells[0].Value.ToString();
string service = comboBox1.Text;
WebClient web = new WebClient();
web.UseDefaultCredentials = true;
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(() =>
{
System.IO.Stream stream = web.OpenRead("http://<some website>");
StreamReader reader = new StreamReader(stream);
String holdHTML = reader.ReadToEnd();
Match mTitle = Regex.Match(holdHTML, ">" + service + "(.*?)<");
if (mTitle.Success)
{
string package = mTitle.Groups[0].Value;
string[] package1 = package.Split('>', '<');
dataGridView1.Rows[index].Cells[5].Value = package1[1];
}
else
{
dataGridView1.Rows[index].Cells[5].Value = "N/A";
}
}));
}
}
|
|
|
|
|
There are a few issues with your code that you need to address. First, you are creating a list of tasks that you end up doing nothing with other than adding a single task. Why not just use that single task instead? Second issue, the StartNew is, essentially, fire and forget so you're calling it and letting the code fall back to the calling method immediately. You have nothing in there that's handling cases where the calling code errors out (for instance); to fix this, add something called a continuation that gets called when your task completes - you can handle your error cases in here for instance. Third, have you tested the core logic of the method inside the task to make sure that adds the data you would expect? Before moving your code into a task, it's generally worth seeing if the code runs successfully and only move it once you are sure it's rock solid.
What version of .NET are you using? It might be worth investigating using async/await and Task.Run if you can.
This space for rent
|
|
|
|
|
Thanks Pete for responding! Yes, my code was working before trying the TaskFactory. I have removed the List of tasks and the code below is working. But, my issue is, I am not sure how to use the task in the for loop. Currently, this is taking about 5 seconds for 3 rows whether I use the Task or not. I am trying to figure out where to place it so I can do all three calls at one time and reduce the time from 5 seconds to 1.75 seconds, which is about what it takes for 1 row.
<pre>
if (dataGridView1.Rows.Count > 1)
{
for (int index3 = 0; index3 < dataGridView1.Rows.Count-1; index3++)
{
string gridDevice = dataGridView1.Rows[index3].Cells[0].Value.ToString();
string service = comboBox1.Text;
WebClient web = new WebClient();
web.UseDefaultCredentials = true;
Task tasks = Task.Factory.StartNew( () =>
{
System.IO.Stream stream = web.OpenRead("http://<website>");
StreamReader reader = new StreamReader(stream);
String holdHTML = reader.ReadToEnd();
Match mTitle = Regex.Match(holdHTML, ">" + service + "(.*?)<");
if (mTitle.Success)
{
string package = mTitle.Groups[0].Value;
string[] package1 = package.Split('>', '<');
dataGridView1.Rows[index3].Cells[5].Value = package1[1];
}
else
{
dataGridView1.Rows[index3].Cells[5].Value = "N/A";
}
});
tasks.Wait();
}
}</pre>
|
|
|
|