|
Apologies for the shouting but this is important.
When answering a question please:
- Read the question carefully
- Understand that English isn't everyone's first language so be lenient of bad spelling and grammar
- If a question is poorly phrased then either ask for clarification, ignore it, or mark it down. Insults are not welcome
- If the question is inappropriate then click the 'vote to remove message' button
Insults, slap-downs and sarcasm aren't welcome. Let's work to help developers, not make them feel stupid..
cheers,
Chris Maunder
The Code Project Co-founder
Microsoft C++ MVP
|
|
|
|
|
For those new to message boards please try to follow a few simple rules when posting your question.- Choose the correct forum for your message. Posting a VB.NET question in the C++ forum will end in tears.
- Be specific! Don't ask "can someone send me the code to create an application that does 'X'. Pinpoint exactly what it is you need help with.
- Keep the subject line brief, but descriptive. eg "File Serialization problem"
- Keep the question as brief as possible. If you have to include code, include the smallest snippet of code you can.
- Be careful when including code that you haven't made a typo. Typing mistakes can become the focal point instead of the actual question you asked.
- Do not remove or empty a message if others have replied. Keep the thread intact and available for others to search and read. If your problem was answered then edit your message and add "[Solved]" to the subject line of the original post, and cast an approval vote to the one or several answers that really helped you.
- If you are posting source code with your question, place it inside <pre></pre> tags. We advise you also check the "Encode "<" (and other HTML) characters when pasting" checkbox before pasting anything inside the PRE block, and make sure "Use HTML in this post" check box is checked.
- Be courteous and DON'T SHOUT. Everyone here helps because they enjoy helping others, not because it's their job.
- Please do not post links to your question into an unrelated forum such as the lounge. It will be deleted. Likewise, do not post the same question in more than one forum.
- Do not be abusive, offensive, inappropriate or harass anyone on the boards. Doing so will get you kicked off and banned. Play nice.
- If you have a school or university assignment, assume that your teacher or lecturer is also reading these forums.
- No advertising or soliciting.
- We reserve the right to move your posts to a more appropriate forum or to delete anything deemed inappropriate or illegal.
cheers,
Chris Maunder
The Code Project Co-founder
Microsoft C++ MVP
|
|
|
|
|
Hi,
I have used several TextBoxes and ComboBoxes in my own project. I want to reset TextBoxes at once by pressing a button. I wrote a simple method as follows:
foreach (var c in Controls)
{
if (c is TextBox)
{
((TextBox)c).Clear();
}
}
When I run the code, nothing happens.
All TextBoxes have their own existing texts.
Please guide me.
modified 6hrs 15mins ago.
|
|
|
|
|
The docs say nothing about "Clear" doing anything "visible".
I'd use:
if ( c is TextBox tb ){
tb.Text = "";
}
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
Clear works in both WinForms and WPF.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Never used it. Can't think of a reason either ... particularly since I want the TB to reflect what's in the binding target, and vise versa. I have no idea what Clear does in this case.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
That will work - on textboxes, it won't touch ComboBoxes - provided they aren't inside any containers: Panel, Splitters, GroupBoxes, and so on. If they are, then you need to recurse though the container.Controls collection as well in order to find them.
It will also only find TextBoxes which are in the current instance of a Form - ones in a different Form or a different instance will not be found and cleared.
But in more recent versions of C#, it's clearer to do this than cast:
private void MyButton_Click(object sender, EventArgs e)
{
foreach (Control c in Controls)
{
if (c is TextBox tb)
{
tb.Clear();
}
}
}
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I was composing a reply to a QA question today [^], and I started thinking about why I made the following assumptions in C#:
1) app scoped global variables are evil
2) defining a static class outside my own/any NameSpace is evil.
Given the strongly-typed/OOP gestalt of C#, why did its designers allow something like this:// top-level 'using statements ...
public static class Constants
{
public const double PI = Math.PI;
public static double E { set; get; } = Math.E;
}
namespace WhatEver
{} Opinions ?
«One day it will have to be officially admitted that what we have christened reality is an even greater illusion than the world of dreams.» Salvador Dali
|
|
|
|
|
It doesn't have to be a static class, any class can be defined outside all namespaces, in which case it's part of the default namespace: namespace keyword - C# Reference | Microsoft Docs[^]
Quote: Whether or not you explicitly declare a namespace in a C# source file, the compiler adds a default namespace. This unnamed namespace, sometimes referred to as the global namespace, is present in every file. Any identifier in the global namespace is available for use in a named namespace.
Why? You'd probably have to ask the language authors ...
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I have 12 sets of dll for multi purpose, when I deploy the particular dll and I get this error. Please help me on this!. Mine is a C# code
|
|
|
|
|
|
This is not a good question - we cannot work out from that little what you are trying to do.
Remember that we can't see your screen, access your HDD, or read your mind - we only get exactly what you type to work with.
How do you expect us to work out what method is missing from code we can't see, given a return type only, and with no idea what your "12 sets of dll" actually are, or how you deployed tham?
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You'd have to show the whole error. But basically it's telling you that it cannot find some code that you are trying to call.
|
|
|
|
|
Hi,
I am currently working on SHA256withRSA algorithm in Window Fomrs, C#. My main objective is to get signed signature of my encrypted SHA256withRSA string with my Custom Private Key String which I generated from an online tool. In order to do that, I came to know that it happens via RSACryptoServiceProvider . Now in order to complete my sign operation I have to get the RSAParameters of my private key. And when I trying it the only part that I am getting is Modulus and Exponent part of the string. But I want to extract all of the components (P, Q, DP, DQ, InverseQ, D).
So where I am stuck unable to do it for quite some time. this is my first time working with this encryption stuff. And not sure if I am following the right convention.
Thanks
|
|
|
|
|
With a "custom private key string", and "component extraction", and "first time working", I wouldn't trust you.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
Gerry Schmitz,
Thanks for replying. I totally understand your concern. But at first I was following this link[^] and trying to understand all of the procedures.
As for my project, I would be getting a private key from the client (by adding some sort of certificate - which I don't know much about just yet, but that thing is in the future). so after getting that key I have to sign it with my SHA256withRSA string. And that's all I have to do for now.
|
|
|
|
|
Hi All,
I am using Microsoft azure storage account class in C# to upload a file to storage account in C#.
Does anyone know how can i share the uploaded file with multiple users through C# code.
|
|
|
|
|
|
In the past, I did most of my work with parallel objects using Rx, but that was made a bit cumbersome in the recent project. So I was following the code from Brian Lagunas, I made some tweaks to it to see how it all worked.
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WpfAsynTaskAwait
{
public class MainViewModel:BindableBase
{
#region "ctor"
public MainViewModel()
{
Text = "1: Main UI thread on: " + Thread.CurrentThread.ManagedThreadId.ToString();
Task.Run(() => DoSomething(MethodCallback)).Await(CompletedCallback, ErrorCallback);
}
#endregion
async Task DoSomething(Action<string> methodCallback)
{
await Task.Delay(1500);
methodCallback?.Invoke("2: Task starts on thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
await Task.Delay(1500);
methodCallback?.Invoke("3: Task runs on thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
await Task.Delay(1500);
}
#region "Variables"
private string _text = "Default value";
public string Text
{
get { return _text; }
set
{
SetProperty(ref _text, value);
}
}
#endregion
#region "Callback methods"
private void CompletedCallback()
{
Text = "4: Method completed called from thread: " + Thread.CurrentThread.ManagedThreadId.ToString();
}
private void MethodCallback(string message)
{
Text = message + Environment.NewLine + "Task callback from thread: " + Thread.CurrentThread.ManagedThreadId.ToString();
}
private void ErrorCallback(Exception ex)
{
Text = ex.Message;
}
#endregion
}
public static class TaskExtensions
{
public async static void Await(this Task task, Action completedCallback, Action<Exception> errorCallback)
{
try
{
await task;
completedCallback?.Invoke();
}
catch (Exception ex)
{
errorCallback?.Invoke(ex);
}
}
}
}
I just found it rather confusing that the method MethodCallback was allowed to interact directly (update) via binding with a UI-bound element. And my DoSomething does not return a Task but still does not complain about the implementation. This just confuses me. Why am I allowed to interact via callbacks from a worker thread to a UI thread?
|
|
|
|
|
Aren't callbacks just executed on the main thread, instead of the invoking one?
> "Task callback from thread: " + Thread.CurrentThread.ManagedThreadId.ToString()
Aigt, Convert.ToString(Thread.CurrentThread.ManagedThreadId) to avoid a Null-exception. What did your logs say? And if updating directly, instead of binding, does it show the same result?
Bastard Programmer from Hell
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
It's WPF stuff with PRISM, so I don't really have access to the textbox in the GUI directly. But it says that the application changes the property Text from the background thread. The text is thus updated on the UI via the binding and INotifiedPropertyChange interaction.
|
|
|
|
|
If you modify a bound property in your view model from a non-UI thread, WPF automatically marshals the UI update changes for that property to the UI thread. It works for all scalar types, but not collections. You have to create your own collection type that does the marshalling.
|
|
|
|
|
Thank you for the answer Dave.
So I modified the code in the MethodCallback and got exactly what you said : This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread.
Now I have some more research to go further.
The change in the code is just banal, Binding to a TextBox and Listview's itemssource directly will throw the exception:
public class MainViewModel:BindableBase
{
#region "ctor"
public MainViewModel()
{
Text = "1: Main UI thread on: " + Thread.CurrentThread.ManagedThreadId.ToString();
TextCollection.Add("1: Main UI thread on: " + Thread.CurrentThread.ManagedThreadId.ToString());
Task.Run(() => DoSomething(MethodCallback)).Await(CompletedCallback, ErrorCallback);
}
#endregion
async Task DoSomething(Action<string> methodCallback)
{
await Task.Delay(1500);
methodCallback?.Invoke("2: Task starts on thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
TextCollection.Add("2,5: Task starts on thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
await Task.Delay(1500);
methodCallback?.Invoke("3: Task runs on thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
await Task.Delay(1500);
}
#region "Variables"
private ObservableCollection<string> _textCollection = new ObservableCollection<string>();
public ObservableCollection<string> TextCollection
{
get { return _textCollection; }
set { SetProperty(ref _textCollection, value); }
}
private string _text = "Default value";
public string Text
{
get { return _text; }
set
{
SetProperty(ref _text, value);
}
}
#endregion
#region "Callback methods"
private void CompletedCallback()
{
Text = "4: Method completed called from thread: " + Thread.CurrentThread.ManagedThreadId.ToString();
TextCollection.Add("4: Method completed called from thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
}
private void MethodCallback(string message)
{
Text = message + Environment.NewLine + "Task callback from thread: " + Thread.CurrentThread.ManagedThreadId.ToString();
TextCollection.Add(message + Environment.NewLine + "Task callback from thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
}
private void ErrorCallback(Exception ex)
{
Text = ex.Message;
}
#endregion
}
public static class TaskExtensions
{
public async static void Await(this Task task, Action completedCallback, Action<Exception> errorCallback)
{
try
{
await task;
completedCallback?.Invoke();
}
catch (Exception ex)
{
errorCallback?.Invoke(ex);
}
}
}
|
|
|
|
|
|
I like this. Not a lot of backbreaking coding work
Literally just added two lines of code and all works well.
private object _TextCollectionLock = new object();
public MainViewModel()
{
BindingOperations.EnableCollectionSynchronization(TextCollection, _TextCollectionLock);
...
}
|
|
|
|