zoukankan      html  css  js  c++  java
  • [基础文章]浅谈文件拖放

    .NetFramework2.0中为我们提供好了丰富的"后台资源",以便提高我们的编程效率.这里本人也结合自己做的聊天程序(见置顶文章)中遇到的问题来浅谈一下文件拖放.
    步奏:
    1、将拖放目标控件AllowDrop属性设置为True(并不是所有的控件都支持文件拖放哦^_^)

    this.AllowDrop=True;
    2、写拖放目标控件的DragEnter事件。
    private void Frm_Chat_DragEnter(object sender, DragEventArgs e)
            
    {
                
    if (listBox.SelectedIndex != -1)
                
    {
                    
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
                    
    {
                        e.Effect 
    = DragDropEffects.Link;
                    }

                    
    else
                    
    {
                        e.Effect 
    = DragDropEffects.None;
                    }

                }

                
    else
                
    {
                    MessageBox.Show(
    "请选择一个用户");
                }

            }
    3、写拖放目标控件的DragDrop事件
     private void Frm_Chat_DragDrop(object sender, DragEventArgs e)
            
    {
                
    if (listBox.SelectedIndex != -1)
                
    {
                    
    //关键语句
                    receiveFileName = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
                    
    string[] filename = sendFile.Split('\\');
                    
    //MessageBox.Show(filename[filename.Length - 1]);
                    string text = "FILE|" + listBox.SelectedItem.ToString() + "|" + username + "|" + filename[filename.Length - 1+ "|RQ|";
                    
    byte[] buffer = System.Text.Encoding.Default.GetBytes(text);
                    Form1.netStream.Write(buffer, 
    0, buffer.Length);
                    btnFileTrans.Enabled 
    = false;
                }

                
    else
                
    {
                    MessageBox.Show(
    "请选择一个用户");
                }

            }
    到此,一个简单的文件拖放功能可以算是完成了。但是在实际应用中常常会出现“DragDrop注册失败”异常,这个问题是由于目标控件是在另外一个独立线程中打开。解决方法也很简单,只需表明当前线程为单线程单元即可。
       Thread loadThread = new Thread(new ThreadStart(Connect));
               loadThread.IsBackground 
    = true;
               
    //表明将当前线程设置为单线程单元
               loadThread.ApartmentState = ApartmentState.STA;
               loadThread.Start();
    SIGNATRUE-----------------------------------
    龟看上去很慢很慢,而且还有些憨,虽然没有兔子跑的快,但是只要有坚持不懈的毅力,就一定会到达成功的比彼岸.如果自己是龟,就不要试图把自己变成兔子,我就是那只憨龟。
  • 相关阅读:
    Linux命令——mkdir
    UNIX 高手的 10 个习惯
    Linux命令——pwd
    Linux命令——cd命令
    Linux命令——ls命令
    denyhost安装脚本
    三台服务器无需密码相互访问
    字符串方法
    nginx简易安装
    shell 条件判断语句整理
  • 原文地址:https://www.cnblogs.com/seek/p/1203749.html
Copyright © 2011-2022 走看看