Lỗi tạo Map Frame mới: Error HRESULT E_FAIL has been returned from a call to a COM ..

Thảo luận trong 'Lập trình trong ArcGIS' bắt đầu bởi taibc, 6/11/12.

  1. taibc

    taibc New Member

    Tham gia ngày:
    9/7/12
    Bài viết:
    130
    Đã được thích:
    0
    Điểm thành tích:
    0
    Nghề nghiệp:
    Kỹ sư phần mềm - Công ty địa chính tư vấn và dịch
    Nơi ở:
    Hà Nội
    Hi,

    Mình sử dụng đoạn code phía dưới để tạo Map Frame, nhưng đã gặp lỗi: Error HRESULT E_FAIL has been returned from a call to a COM component. khi gọi hàm AddElement.


    Mã:
    IEnvelope envelope = new EnvelopeClass(); envelope.PutCoords(Upper_LeftX, Upper_LeftY - _Height, Upper_LeftX + _Width, Upper_LeftY); IMap map = new MapClass(); IMapFrame mapFrame = new MapFrameClass(); mapFrame.Map = map; IElement mapElement = mapFrame as IElement; mapElement.Geometry = envelope; pageControl.ActiveView.GraphicsContainer.AddElement(mapElement , 0); // Lỗi phát sinh pageControl.ActiveView.FocusMap = mapFrame.Map; pageControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); ​
    Lỗi trên chỉ xảy ra khi mình đang chọn (select element) vào FocusMap (hay MapFrame). Nếu mình không select thì không xảy ra lỗi này.

    Bạn nào biết cách khắc phục chỉ giúp mình nhé ?

    Thanks and regards,
     
  2. CafeGIS

    CafeGIS New Member

    Tham gia ngày:
    31/10/11
    Bài viết:
    36
    Đã được thích:
    0
    Điểm thành tích:
    0
    Bạn có thể lấy được đối tượng IMxDocument ko? Nếu được thì bạn có thể thử cách này xem sao: Lấy IMap từ mxDoc.FocusMap. Thay vì dùng pageControl.ActiveView.GraphicsContainer.AddElement(), bạn tạo đối tượng ESRI.ArcGIS.Carto.IGraphicsContainer graphicContainer = mxDoc.PageLayout as IGraphicsContainer. Sau đó dùng graphicContainer.AddElement(mapElement , 0). Và tạo thêm đối tượng IActiveView actv= graphicContainer as
    IActiveView . actv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, mapElement , envelope);
    Mã:
    IEnvelope envelope = new EnvelopeClass(); envelope.PutCoords(Upper_LeftX, Upper_LeftY - _Height, Upper_LeftX + _Width, Upper_LeftY); IMap map = mxDoc.FocusMap; IMapFrame mapFrame = new MapFrameClass(); mapFrame.Map = map; IElement mapElement = mapFrame as IElement; mapElement.Geometry = envelope; IGraphicsContainer graphicContainer = mxDoc.PageLayout as IGraphicsContainer; graphicsContainer.AddElement(mapElement , 0); IActiveView actv= graphicContainer as IActiveView; actv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, mapElement , envelope); ​
     
    Last edited by a moderator: 12/12/12
  3. taibc

    taibc New Member

    Tham gia ngày:
    9/7/12
    Bài viết:
    130
    Đã được thích:
    0
    Điểm thành tích:
    0
    Nghề nghiệp:
    Kỹ sư phần mềm - Công ty địa chính tư vấn và dịch
    Nơi ở:
    Hà Nội
    Cảm ơn bạn, mình đã xử lý được vấn đề trên nhưng theo một cách khác
     

Chia sẻ trang này

Share
Đang tải...