今天领导的很多政策下来了,我要做业务了!心里又高兴又紧张,公司的政策对我还算合理吧,压力也大,但还好不是压得不能正常呼吸,我也希望自己能对自己有所突破,希望自己干得开心吧,钞票也多多就好了!
还希望大家支持我,鼓励我,希望我越做越好!
做业务时间上要灵活一些,感觉要轻松一些,我也希望下年怀孕以后也能继续干下去,为我们的小家多一份收入,看到老公辛苦的挣钱钱我的心里也不好受。嗯,老公我们共同努力,房子,车子,一切都会有的,我们会幸福永远滴!!!!
今天领导的很多政策下来了,我要做业务了!心里又高兴又紧张,公司的政策对我还算合理吧,压力也大,但还好不是压得不能正常呼吸,我也希望自己能对自己有所突破,希望自己干得开心吧,钞票也多多就好了!
还希望大家支持我,鼓励我,希望我越做越好!
做业务时间上要灵活一些,感觉要轻松一些,我也希望下年怀孕以后也能继续干下去,为我们的小家多一份收入,看到老公辛苦的挣钱钱我的心里也不好受。嗯,老公我们共同努力,房子,车子,一切都会有的,我们会幸福永远滴!!!!
上午,老板在公司开会了,总结了公司去年的收获得失,也说了今年的任务。今年是公司的关键年,也是电子商务热闹年,公司的将来,公司的成败也在今年。
公司的成败,关键在于今年的业绩,业绩上去了,风险什么的都来了,资金来了公司就有前途了,上海的业务今年要提高,提高的关键也要在看我,说到看我,我就好紧张,感觉压力上来了。
公司目前的“商务通”,主销产品是我和公司领导共同策划的,所以我对这个产品是最熟悉的,领导要让我去销售,希望能给公司带来一些收益,当然我也很乐意,在此一博吧!我对我们的产品还是很有信心的,希望大家都给我帮助和鼓励,我也希望走出这样的黑暗时代!加油吧
如要在PropertyGrid中显示多行编辑时需要重载UITypeEditor类并修改EditorAttribute属性。
1. 重载类MultilineTextEditor
public class MultilineTextEditor : UITypeEditor
{
private static ILog _log = LogManager.GetLogger(typeof(MultilineTextEditor));
public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
{
try
{
IWindowsFormsEditorService svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (svc != null)
{
if (value is string)
{
TextBox box = new TextBox();
box.AcceptsReturn = true;
box.Multiline = true;
box.Height = 120;
box.BorderStyle = BorderStyle.None;
box.Text = value as string;
svc.DropDownControl(box);
return box.Text;
}
}
}
catch (Exception ex)
{
if (_log.IsErrorEnabled)
{
_log.Error(“MultilineTextEditor error: ” + ex.Message);
}
return value;
}
return value;
}
}
2. 增加EditorAttribute属性
[DescriptionAttribute(“The item description.”),
EditorAttribute(typeof(MultilineTextEditor), typeof(System.Drawing.Design.UITypeEditor))]
public string Description
{
get { return _data.Description; }
set { _data.Description = value; }
}
3. 将包含各个属性的类实例赋给PropertyGrid的SelectedObject属性,即可通过这个实现进行读写操作。
4. PropertyGrid 的部分外观特征
通过 HelpBackColor、HelpForeColor 和 HelpVisible 属性可以更改背景颜色、更改字体颜色或隐藏说明窗格。
通过 ToolbarVisible 属性可以隐藏工具栏,通过 BackColor 属性可以更改工具栏的颜色,通过 LargeButtons 属性可以显示大工具栏按钮。
使用 PropertySort 属性可以按字母顺序对属性进行排序和分类。
通过 BackColor 属性可以更改拆分器的颜色。
通过 LineColor 属性可以更改网格线和边框。
5. 部分属性的显示方式
DescriptionAttribute – 设置显示在属性下方说明帮助窗格中的属性文本。这是一种为活动属性(即具有焦点的属性)提供帮助文本的有效方法。
CategoryAttribute – 设置属性在网格中所属的类别。当您需要将属性按类别名称分组时,此特性非常有用。如果没有为属性指定类别,该属性将被分配给杂项类别。可以将此特性应用于所有属性。
BrowsableAttribute – 表示是否在网格中显示属性。此特性可用于在网格中隐藏属性。默认情况下,公共属性始终显示在网格中。
ReadOnlyAttribute – 表示属性是否为只读。此特性可用于禁止在网格中编辑属性。默认情况下,带有 get 和 set 访问函数的公共属性在网格中是可以编辑的。
DefaultValueAttribute – 表示属性的默认值。如果希望为属性提供默认值,然后确定该属性值是否与默认值相同,则可使用此特性。
DefaultPropertyAttribute – 表示类的默认属性。在网格中选择某个类时,将首先突出显示该类的默认属性。
年初5,去同事家(同事老家是湖北滴)桌子上有一盘香肠,腊腊的,很香。我跟LG都吃了很多。晚上回家给老家的父母打电话,谈到腊肉香肠,觉得好香好香,跟妈妈说好像吃家里的哦,妈妈也咯咯的笑,跟我说回来吃啊,家里好多好多,说得我都流口水了,还是忍忍吧,等5.1爸爸妈妈过来给我带来吃
说话无心,听话的有心,初六,妹妹就要离开家回重庆了,爸爸妈妈给妹妹打点行礼,大多都是吃的,香肠,腊肉装了几十斤,说让妹妹带下来给我邮寄过来。我再三推迟不让给我邮寄了,虽说怕他们麻烦,但真的是好想好想吃,妹妹好像知道我的心思,上班第一天就去给我问托运,邮寄,问好之后晚上回家就给我打包托运,好是感动。妹妹带了那么多下重庆来,自己就留了4节香肠,给我托了40多节,腊肉也自己留了一小点,给我托了2大块,第二天装好了才告诉我,我好是感动,爸爸也特意打电话给妹妹说多给我托点,老家还有,下次爸爸下来就给妹妹再带。说到我的爸爸,我得说几句,他是一个特别爱家的好男人,能吃苦,又节约,爱我们有他特殊的方式,默默的为全家人付出,自己在外打工,舍不得吃好的,舍不得用好一点,我们给他买的新衣服,他也舍不得穿,都放在家里,好吃的都会留着带回家给妈妈吃(说到这里了,我又记起了小时候,爸爸去给人家家的干活,人家家里吃的好吃的,比如皮蛋,咸蛋,花生,糖果,老爸总舍不得在饭桌上吃,都带回来我跟妹妹分着吃,当时我跟妹妹特别希望爸爸去别家吃饭,就是希望给我们带好吃的回来),现在我们都大了,自己在外面工作了,想吃什么都可以自己买了,就唯一很掂记家里的腊肉香肠,是外面买都买不到的。爸爸妈妈心里头都明白,妈妈也特别自豪我们还是那么喜欢吃她做的,更自豪的是女婿也爱吃她做的腊肉,香肠,哈哈,我又想起了一句话:不是一家人不近一家门!!!
想到下个星期就可以吃到我渴望的爸爸妈妈做的香肠腊肉了,口水吞了一口又一口,还差点就留出来了
心里特别开心,(呵呵,我跟LG都是大馋猫猫)要在这里特别感谢我的家人,我爱你们!新的一年,我们全家都幸幸福福,健健康康,开开心心,顺顺利利,钱钱多多!!!!
传张全家福!
上班2天了,也没有什么事情做,老板在这边,也没有什么要吩咐的,唉!呆得没有什么意义
当程序在启动过程中需要花一些时间去加载资源时,我们希望程序能显示一个欢迎界面,能简单介绍软件功能的同时还能告知用户该程序还在加载中,使得用户体验更友好。
实现如下:
1. 添加欢迎界面的窗体(比如SlpashForm),做以下调整:
将FormBorderStyle属性设成None,即没有窗体边框
将StartPosition属性设成CenterScreen,即总是居中
将TopMost属性设成True,即总是在顶部
将UseWaitCursor属性设成Ture,即显示等待光标,让人感觉后台还在运行
增加一个PictureBox控件,与欢迎图片大小一致,窗体的大小也设成一致
增加一个ProgressBar控件,将Style设成Marquee,将MarqueeAnimationSpeed设成50
2. 主界面的构造函数改成以下代码:
// Create thread to show splash window
Thread showSplashThread = new Thread(new ThreadStart(ShowSplash));
showSplashThread.Start();
// Time consumed here
InitializeFrame(); // 把原来构造函数中的所有代码移到该函数中
// Abort show splash thread
showSplashThread.Abort();
showSplashThread.Join(); // Wait until the thread aborted
showSplashThread = null;
3. 显示SplashForm的线程函数
///
private void ShowSplash()
{
SplashForm sForm = null;
try
{
sForm = new SplashForm();
sForm.ShowDialog();
}
catch (ThreadAbortException e)
{
// Thread was aborted normally
if (_log.IsDebugEnabled)
{
_log.Debug(“Splash window was aborted normally: ” + e.Message);
}
}
finally
{
sForm = null;
}
}
4. 在主窗体的Load事件加激活自己的代码
SetForegroundWindow(Process.GetCurrentProcess().MainWindowHandle);
在使用SetForegroundWindow之前先声明一下
// Uses to active the exist window
[DllImport(“User32.dll”)]
public static extern void SetForegroundWindow(IntPtr hwnd);
实例图:
在某些情况我们要求应用程序只能运行一次,后运行的实例要把之前运行的程序激活并自己退出。
在网上搜索了一些实现并根据自己的理解重新整理得出下面的实现代码:
1. API函数的声明
// Uses to active the exist window
[DllImport(“User32.dll”)]
public static extern void SetForegroundWindow(IntPtr hwnd);
[DllImport(“User32.dll”)]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
// 0-Hidden, 1-Centered, 2-Minimized, 3-Maximized
private const int WS_SHOWNORMAL = 3;
2. 查找并激活已经存在的程序(仅应用于进程名相同的程序)
///
///
private static bool ExistRunningInstance()
{
Process currentProcess = Process.GetCurrentProcess();
Process[] procList = Process.GetProcessesByName(currentProcess.ProcessName);
foreach (Process proc in procList)
{
// Found a running instance
if (proc.Id != currentProcess.Id)
{
// Active the running instance
ShowWindowAsync(proc.MainWindowHandle, WS_SHOWNORMAL);
SetForegroundWindow(proc.MainWindowHandle);
return true;
}
}
return false;
}
3. 在Main函数入口判断
[STAThread]
static void Main()
{
// Control only one instance with the same process name can run
if (ExistRunningInstance())
{
Environment.Exit(1); // App is running, exit
}
// 程序真正运行的代码
}
C#2005后不再支持多线程直接访问界面的控件(界面创建线程与访问线程不是同一个线程),不过可以使用delegate来解决:
1. 声明一个delegate和定义一个delegate的实现函数
delegate void ShowProgressDelegate(int newPos);
private void ShowProgress(int newPos)
{
// 判断是否在线程中访问
if (!_progressBar.InvokeRequired)
{
// 不是的话直接操作控件
_progressBar.Value = newPos;
}
else
{
// 是的话启用delegate访问
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// 如使用Invoke会等到函数调用结束,而BeginInvoke不会等待直接往后走
this.BeginInvoke(showProgress, new object[] { newPos });
}
}
2. 定义线程函数(在另一个线程中可以对界面控件进读操作)
private void ProgressStart()
{
while (true)
{
int newPos = _progressBar.Value + 10;
if (newPos > _progressBar.Maximum)
{
newPos = _progressBar.Minimum;
}
Trace.WriteLine(string.Format(“Pos: {0}”, newPos));
// 这里直接调用方法,由其内部自动判断是否启用delegate
ShowProgress(newPos);
Thread.Sleep(100);
}
}
3. 线程的启动和终止
private Thread _progressThread;
_progressThread = new Thread(new ThreadStart(ProgressStart));
// 可选,功用:即使该线程不结束,进程也可以结束
_progressThread.IsBackground = true;
_progressThread.Start();
_progressThread.Abort();
// 可选,功用:等到线程结束才继续
_progressThread.Join();
_progressThread = null;
明天就要上班了!
臭美一下过年拍的照片:
还有我的猪LG!
总的来说这个春节过得马马虎虎,睡得是相当的舒服,吃来也比较腐败,不过就是人少没那么热闹。明天又该投入工作,同时期待着下一次的长假5.1,呵呵